PHP preg_match在两个不同的服务器上返回不同的值


PHP preg_match returns different value on 2 different servers

我使用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规范最近有任何变化。有人能告诉我为什么这两个版本的网站在使用相同的代码时返回不同的值吗?非常感谢。

我也得到了与@TomFenech相同的结果,但如果我删除了第二个"p"之前的-。"/^[A-Z''p{L}][A-Z'''''p{s L}]{0,49}$/ui",$firstName以True 响应

$firstName = 'John';
if (preg_match("/^[A-Z'p{L}][A-Z'' 'p{L}]{0,49}$/ui", $firstName)) {
    echo 'True';
} else {
    echo 'False';
}

然而,我也逃脱了冲刺,也获得了True。

if (preg_match("/^[A-Z'p{L}][A-Z'' '-'p{L}]{0,49}$/ui", $firstName)) {
$ php -v
PHP 5.5.19 (cli) (built: Nov 14 2014 01:09:01)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Zend OPcache v7.0.4-dev, Copyright (c) 1999-2014, by Zend Technologies