preg_match不区分拉丁字符和西里尔字符

时间:2013-10-01 10:26:36

标签: php

preg_match('/^[\p{L}\s]+$/u', 'АБВГД ENGLISH STRING', $matches);

这里它匹配所有字符西里尔语和拉丁语,为什么它们没有被过滤?,文件编码是utf-8,我做错了什么?

2 个答案:

答案 0 :(得分:5)

使用:

/^(?:\p{Cyrillic}+|\p{Latin}+)$/,分组只允许一种类型的char。

\p{Cyrillic},它匹配任何西里尔字符..

\p{Latin},它匹配任何拉丁字符。

如果您只需要整个字符串中的英文字符:

使用:

preg_match_all('/[\p{Latin}]+/u', 'АБВГД ENGLISH STRING', $matches);
print_r($matches);

它将返回所有英文比赛。

答案 1 :(得分:1)

RegEx中的

\p{L}与Unicode类别匹配(L是类别字母)。 这就是为什么你的正则表达式匹配所有字母符号,包括西里尔字母。

如果您想获得拉丁语,请将\p{Latin}用于所有unicode拉丁语符号,或a-z仅匹配ASCII符号