PHP正则表达式将不匹配重音字符


PHP Regular Expression will not match accented characters

我正在尝试构建一个正则表达式,该表达式与PHP兼容,允许使用重音字符,例如"ü"。据我所知,'' p{L}运算符应该这样做。到目前为止我所拥有的:

/^[a-z0-9'p{L}][a-z0-9_'p{L}]*/i

这应该允许一个字符串以任何a-z、0-9和重音字符开头,然后可以后跟任何数量的a-z、0-9和重音字符,并且整个表达式不区分大小写。

然而,在测试中,当在字符串中的任何位置使用诸如"ü"之类的字符时,验证都会失败。我已经确保传递的值是用utf8编码的,使用:

utf8_encode($value)

然而,它仍然失败了。有什么建议吗?

提前感谢

-------------------------编辑-----------------------

在另一台服务器上测试后,原始模式也可以工作。

/^[a-z0-9'p{L}][a-z0-9_'p{L}]*/i

问题似乎与服务器设置有关。我会在找到解决方案后发布。

我认为这可能对你有用:

$pattern =  '/^[0-9a-zá-úàü][0-9_a-zá-úàü]*$/i';

我运行了以下代码来测试模式:

$str = "patinação";
$pattern =  '/^[0-9a-zá-úàü][0-9_a-zá-úàü]*$/i';
if (preg_match($pattern, $str, $matches)){
    echo $matches[0];//output: patinação
}