2013-09-27 29 views
1

我很难将正确的表达放在一起,因此它拒绝除字母,句号,撇号,空格和连字符之外的所有内容。名称php的表单验证包括撇号,空格,连字符和句点

到目前为止,这适用于除撇号之外的所有内容,我试图用单个和双“\”来逃脱都无济于事。

if(!preg_match("/^[a-zA-Z'. -]+$/",$_POST['name'])) 
    { 
     $error_name="The name you entered is invalid."; 
    } 
//obrien - pass 
//o'brien - fail 
//Dr. OBrien - pass 
//Dr. O'Brien - fail 

这工作完全不同的是没有撇号将其清除。

+0

这应该工作得很好。你面临什么问题? –

+1

我无法重现此问题。你可以用'$ _POST ['name']'的值来更新你的问题吗?'没有通过你的测试? –

+0

它仍然拒绝像O'Brien那样的撇号 –

回答

2

我认为这是因为你试图检查url编码的字符串。将$_POST['name']替换为urldecode($_POST['name'])。在这个阶段的撇号看起来像%27,所以$ _POST ['name']中的O'Brien是O%27Brien,它不会传递你的正则表达式。

编辑:另外,也许这是另一种类型的撇号,你输入的形式为:

结果:

if(!preg_match("/^[a-zA-Z’'. -]+$/",urldecode($_POST['name'])) { 
    $error_name="The name you entered is invalid."; 
} 
+0

是的,但为什么'博士OBrien'通过?该空间必须是'%20'。 – Toto

+0

或者+号。但你是对的,初始正则表达式也不能接受加号。我会用新的变体更新我的答案。 –

+0

对不起,它不起作用。感谢您的关注。 –

2

的问题结束了,在这我不能在我的GoDaddy的帐户访问php.ini中,和addslashes必须启用。以下使它工作。感谢Sergey让我思考服务器可能对发布的数据做什么。

if(!preg_match("/^[a-zA-Z'. -]+$/", stripslashes($_POST['name'])) 
{ 
whatever error message 
} 
1

这是一个了不起的,我能够想出来的,我认为它应该能够与大多数名称都具有hypens,撇号,空格等。

if(!preg_match('/^([a-zA-Z]+[\'-]?[a-zA-Z]+[ ]?)+$/', $string)) 
相关问题