PHP 5.2 preg_match() 编译失败

5

非常感谢您的帮助。我的主机服务器端更新导致评论表单出现两个验证错误。第一个是:preg_match()返回警告:preg_match() [function.preg-match]:编译失败:范围超出字符类中的顺序在[offset 13处和行错误] - 第二个在偏移量14的主题检查上。

它在电子邮件地址检查时出现此问题:

if (preg_match('/[^a-zA-Z0-9_-.]/', $_POST['txtEmail']))

主题检查:

if (preg_match('/[^a-zA-Z0-9:?-. ]/', $_POST['txtSubject']))

我对PHP不熟悉,但可以复制和粘贴!我的网站是frowey.com,在联系我们页面的评论表单在托管操作系统更新后开始出现错误。提前感谢。

2个回答

9
您需要转义减号-,因为它在字符类中具有特殊含义,正如错误信息所提示的那样。在减号前使用反斜杠进行转义:
preg_match('/[^a-zA-Z0-9_\-.]/'

(或者“-”可能是字符组中的第一个或最后一个字符,因此它失去了其特殊功能。)

现在一切都正常了。再次感谢。两个答案都非常有帮助。非常感激。 - mochj

1
if (preg_match('/[^a-zA-Z0-9_\.-]/', $_POST['txtEmail']))

if (preg_match('/[^a-zA-Z0-9:\?\.-]/', $_POST['txtSubject']))

非常感谢两位的回答。我现在会去查看并告诉您结果。 - mochj
已排序!谢谢。还需要更改电子邮件地址验证。现在一切都正常了。再次感谢。 - mochj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接