如何用utf-8支持替换PHP中的所有非字母字符

时间:2012-08-16 14:33:19

标签: php regex utf-8 preg-replace

我想从字符串中删除每个字母字符。

但问题是我不知道字母范围,因为它是UTF8字符串。

可以是ENGLISH,ՀԱՅԵՐԵՆ,ქართული,УКРАЇНСЬКИЙ,РУССКИЙ

我经常这样做

$str = preg_replace('/[^a-zA-Z]/', '', $str);

$str = preg_replace('/[^\w]/u', '', $str);

但他们都清楚外国人的角色

有什么想法吗?

3 个答案:

答案 0 :(得分:9)

使用Unicode character properties

$str = preg_replace('/\P{L}+/u', '', $str);

答案 1 :(得分:6)

更新:对于Unicode,RegExp将如下所示 [^\p{L}\s]+ (不替换空格)

它将替换所有支持UTF8的非字母字符。

  • \P{L}+ - 匹配任何非字母符号
  • \p{P}+ - 仅删除标点符号

以下是一些有用的参考文档:

答案 2 :(得分:1)

字母的Unicode属性为\pL,非字母为\PL

$str = preg_replace('/\PL+/u', '', $str);