2011-06-09 57 views
5

我試圖將textarea的內容正則表達爲4到138個字符。只有長度的正則表達式 - 任何字符

我的正則表達式是這樣的:'/^.{4,138}$/'

但是 - 我希望用戶能夠包括回車符,我相信「」阻止他們做。關於我需要改變的想法?

編輯:

顯然還有其他方法來獲得文本的長度 - strlen ...等等,但是我正在尋找的正則表達式特別是由於檢查的性質(即一個插件,需要正則表達式)

回答

6

我希望用戶能夠包含返回字符,我相信「。」阻止他們做。關於我需要改變的想法?

或者:

  • 變化.[\s\S](空白/換行符是\s部分,其餘全部是\S一部分)
  • 使用SINGLE_LINE(又名DOTALL)regex flag/…/s
+0

[\ s \ S]作品 - 謝謝! :) – Dave 2011-06-09 17:20:19

6

爲什麼不使用strlen檢查字符串長度?這比使用正則表達式更有效率。另外,你可以給出有意義的錯誤信息。

$length = strlen($input); 

if ($length > 138) 
    print 'string too long'; 
else if ($length < 4) 
    print 'string too short'; 
+0

這是通過插件創建的代碼 - 通過將其改爲非正則表達式,我不得不rewirte插件。 – Dave 2011-06-09 17:01:16

+0

(我的問題不是「如何在PHP中找到一個字符串的長度」 - 它專門要求一個正則表達式。) – Dave 2011-06-09 17:02:07

+0

哇。這是插件上的糟糕設計。 – 2011-06-09 17:05:04

1

嘗試'/^.{%d,%d}$/s'.匹配換行符。

1

要麼

/^.{4,138}$/s 

/^[\s\S]{4,138}$/ 

將匹配換行符。

s標誌告訴引擎將整件事視爲一條線,因此.除匹配通常匹配外,還會匹配\n。請注意,這也導致^$到在整個字符串(而不僅僅是每個的開始/結束)的開始和結束匹配,除非你還使用m標誌。

Here's some more info on regex flags.