php preg_match utf-8奇怪的行为

时间:2010-09-05 18:09:10

标签: php regex utf-8 preg-match

我搜索互联网但我找不到合适的答案,所以我试试这种方式。

我使用此代码验证UTF-8输入。我想允许可打印的字符和一些指定的特殊字符。

$pattern = '/[^\w\.\-\s\,\&\!\?\(\)\+\_\:\;]+$/u';
$status = @preg_match($pattern, $value);
if (($status === false) || ($status > 0)) {
    return false;
}

一切正常,除了输入字符串末尾有一个非ascii字符(例如é)。然后我的验证失败了,但它不应该。 我知道这可能是一个愚蠢的错误,但提前感谢每一个提案。

最好的问候

2 个答案:

答案 0 :(得分:2)

尝试Unicode character properties

/[^\p{L}.\-\s,&!?()+_:;]+$/u

此处\p{L}表示任何归类为字母的Unicode字符。

答案 1 :(得分:1)

使用\pL匹配任何字母字符