形式验证名称php包括撇号,空格,连字符和句点

时间:2013-09-27 16:30:39

标签: php regex preg-match

我很难把正确的表达式放在一起,所以它拒绝除了字母,句号,撇号,空格和连字符之外的所有内容。

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

  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

这完全有效,除了没有撇号清除它。

3 个答案:

答案 0 :(得分:3)

问题最终是在我无法访问我的godaddy帐户的php.ini中,必须启用addslashes。以下使它成功。感谢Sergey带领我思考服务器可能对发布的数据做了什么。

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

答案 1 :(得分: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.";
}

答案 2 :(得分:1)

这是一个令人惊讶的,我能想出来的,我认为应该能够处理大多数同时具有超量,撇号,空格等的名称。

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