preg_match('/^[\p{L}\s]+$/u', 'АБВГД ENGLISH STRING', $matches);
这里它匹配所有的西里尔文和拉丁文字符,为什么它们没有被过滤?,文件编码是 utf-8,我做错了什么?
preg_match('/^[\p{L}\s]+$/u', 'АБВГД ENGLISH STRING', $matches);
这里它匹配所有的西里尔文和拉丁文字符,为什么它们没有被过滤?,文件编码是 utf-8,我做错了什么?
利用:
/^(?:\p{Cyrillic}+|\p{Latin}+)$/
, 进行分组以只允许一种类型的字符。
\p{Cyrillic}
, 它匹配任何西里尔字符..
\p{Latin}
,它匹配任何拉丁字符。
如果您只需要整个字符串中的英文字符:
利用:
preg_match_all('/[\p{Latin}]+/u', 'АБВГД ENGLISH STRING', $matches);
print_r($matches);
它将返回所有英文匹配项。
\p{L}
在 RegEx 中匹配 Unicode 类别(L 是类别字母)。这就是为什么您的正则表达式匹配所有字母符号,包括西里尔字母。
如果您只想获取拉丁语,请使用\p{Latin}
所有 unicode 拉丁符号,或a-z
仅匹配 ASCII 符号