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

yea*_* me 0 php

preg_match('/^[\p{L}\s]+$/u', '????? ENGLISH STRING', $matches);
Run Code Online (Sandbox Code Playgroud)

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

kai*_*h19 5

使用:

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

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

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

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

使用:

preg_match_all('/[\p{Latin}]+/u', '????? ENGLISH STRING', $matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)

它将返回所有英格兰比赛.