2010-09-04 97 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

相关问题