我很难把正确的表达式放在一起,所以它拒绝除了字母,句号,撇号,空格和连字符之外的所有内容。
到目前为止,这适用于除了撇号之外的所有内容,我试图用单个和双重“\”来逃避无效。
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 :(得分: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))