preg_match('/^[\p{L}\s]+$/u', 'АБВГД ENGLISH STRING', $matches);
这里它匹配所有字符西里尔语和拉丁语,为什么它们没有被过滤?,文件编码是utf-8,我做错了什么?
答案 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)
\p{L}
与Unicode类别匹配(L是类别字母)。
这就是为什么你的正则表达式匹配所有字母符号,包括西里尔字母。
如果您想获得拉丁语,请将\p{Latin}
用于所有unicode拉丁语符号,或a-z
仅匹配ASCII符号