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

时间:2013-07-05 16:23:59

标签: php regex validation utf-8 expression

我正在尝试构建一个正则表达式,与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

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

1 个答案:

答案 0 :(得分:1)

我认为这可能适合你:

$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
}