【发布时间】:2015-05-06 22:29:22
【问题描述】:
我正在使用 preg_match() 来检查用户输入的字符串是否匹配所需的格式。以前,网站的本地版本返回与生产版本相同的值,但是,现在本地版本在应该为 True 时返回 False。
这是我用来验证用户名字的代码示例:
$firstName = 'John';
if (preg_match("/^[A-Z\p{L}][A-Z\' -\p{L}]{0,49}$/ui", $firstName)) {
echo 'True';
} else {
echo 'False';
}
本地版本错误地返回 False。如果相关,它正在运行 PHP 版本 5.5.17。
生产版本正确返回 True。如果相关,它正在运行 PHP 版本 5.3.29。
我没有看到 preg_match 的 PHP 规范最近有任何变化。谁能告诉我为什么这两个版本的网站在使用相同的代码时返回不同的值?谢谢。
【问题讨论】:
-
使用 v5.6.3 编译正则表达式时出现错误:偏移 20 处字符类中的无效范围
-
我得到了和@TomFenech 一样的结果
-
这些
-\p似乎是冒犯的角色。您可以执行-\'p,它将返回 TRUE。您可能在p之前忘记了'- 或尝试[A-Z\-\p{L}] -
所以,在 cmets 和给出的答案中;这个问题还有悬念吗?
标签: php preg-match