PHP preg_match returns 2 个不同服务器上的不同值

PHP preg_match returns different value on 2 different servers

我正在使用 preg_match() 检查用户输入的字符串是否符合要求的格式。以前,网站的本地版本 returned 与生产版本的值相同,但是,现在本地版本 return 在本应为 True 时却为 False。

这是我用来验证用户名字的代码示例:

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

本地版本不正确returns False。如果它是相关的,它是 运行 PHP 版本 5.5.17.

生产版本正确return正确。如果它是相关的,它是 运行 PHP 版本 5.3.29.

我没有看到 preg_match 的 PHP 规范有任何最新变化。谁能告诉我为什么这两个版本的网站 return 在使用相同代码时有不同的值?谢谢。

我也得到了与@TomFenech 相同的结果,但是如果我在第二个 "p" 之前删除 - 。 "/^[A-Z\p{L}][A-Z\' \p{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