我想从字符串中删除所有非字母字符。问题在于,我不知道字母范围,因为它是UTF8字符串。
它可以是英语,ՀԱՅԵՐԵՆ,ქართული,УКРАЇНСЬКИЙ,РУССКИЙ。
我通常会这样做:
$str = preg_replace('/[^a-zA-Z]/', '', $str);
或者
$str = preg_replace('/[^\w]/u', '', $str);
但是它们都清除了外语字符。 有什么想法吗?
我想从字符串中删除所有非字母字符。问题在于,我不知道字母范围,因为它是UTF8字符串。
它可以是英语,ՀԱՅԵՐԵՆ,ქართული,УКРАЇНСЬКИЙ,РУССКИЙ。
我通常会这样做:
$str = preg_replace('/[^a-zA-Z]/', '', $str);
或者
$str = preg_replace('/[^\w]/u', '', $str);
更新:对于Unicode,RegExp将如下所示[^\p{L}\s]+
(不替换空格)
它将用UTF8支持替换所有非字母字符。
\P{L}+
- 匹配任何非字母符号\p{P}+
- 仅删除标点符号以下是一些有用的参考文档:
字母的Unicode属性为\pL
,非字母的为\PL
$str = preg_replace('/\PL+/u', '', $str);
[\x{0400}-\x{04FF}]
匹配任何在常规西里尔语范围内的字符。 - cleong