我想从字符串中删除所有非字母字符。问题是我不知道字母范围,因为它是 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 字符属性:
$str = preg_replace('/\P{L}+/u', '', $str);
更新:至于 Unicode,RegExp 看起来像这样[^\p{L}\s]+
(不替换空格)
它将用 UTF8 支持替换所有非字母字符。
\P{L}+
- 匹配任何非字母符号\p{P}+
- 仅删除标点符号以下是一些有用的参考文档:
字母的 Unicode 属性是\pL
,对于非字母是\PL
$str = preg_replace('/\PL+/u', '', $str);