2010-09-04 95 views
0

我在用戶輸入的字段上使用正則表達式來確保它們輸入了1到20個字符。什麼是驗證字段的最佳正則表達式?

下面的代碼:

$post_validations = array("title" => '/^[[:alnum:][:punct:][:space:]]{1,100}$/'); 

但是每當用戶進入一個外來字符,或者從MS Word中一個特殊的引號字符(我不能將它貼到這裏,它會將其轉換爲正常的報價! )正則表達式不返回true,並顯示錯誤。

我想知道什麼是最好的正則表達式使用?

感謝

+1

你使用哪種功能來評估體現在哪裏? PCRE還是POSIX?因爲你正在使用POSIX字符類。無論如何,你應該切換到PCRE。什麼是錯誤? – 2010-09-04 17:31:34

回答

6

如果你想要的是知道它是1個到20個字符之間,爲什麼不使用strlen()

$length = strlen($title); 
if($length >= 1 and $length <=20) 
     echo "VALID"; 
else 
     echo "Invalid"; 

[編輯]:檢查是否aplhanumeric或puctuation:

如果你還需要檢查字符串是否包含可能導致問題的任何非打印字符,只需使用ctype_graph()

if(ctype_graph ($title)) 
     echo "Only alphanumeric or punctuation"; 
else 
     echo "Invalid non-printable characters found"; 

[EDIT 2]:

如果你也想的空間  進行驗證,只要使用此:

if(ctype_graph(str_replace(' ', '',$title)) 
+0

看來OP想要允許空格 - 「ctype_graph()」不允許。 – Amber 2010-09-04 17:53:20

+0

@黃色,代碼已更新。 – shamittomar 2010-09-04 18:11:07

相關問題