2013-07-05 39 views
0

我正在尝试构建一个正则表达式,与PHP兼容,允许重音字符,例如'ü'。 从我所了解的\ p {L}运营商应该这样做。我至今:PHP正则表达式与重音字符不匹配

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

这应该允许可以与任何AZ,0-9启动和重音字符,然后可以接着AZ,0-9的任何量和重音字符和字符串的整个表达式不区分大小写。

但是在测试中,当在字符串的任何位置使用诸如'ü'等字符时,验证失败。 我已经确定被传递的值进行编码UTF8使用:

utf8_encode($value) 

但是它仍然失败。 有什么建议吗?

在此先感谢

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

在另一台服务器上测试之后,原始模式也起作用。

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

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

+0

尝试启用UTF修改'/.../ ui' –

+0

不幸的是,utf修饰符没有成功。 – dooffas

回答

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 
} 
+0

与以前相同的结果,它不会注册任何重音字符。 – dooffas

+1

@dooffas - 我刚测试过它,编辑了我的答案以显示测试和结果。如果它不适合你,我不知道为什么,因为它在这里工作正常。 –

+1

我同意,即使用户自己给出的第一个代码在我的机器上也能正常工作。看起来你的web服务器上没有启用pcre unicode。 –