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

Mir*_*kov 6 php regex utf-8 preg-replace

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

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

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

我经常这样做

$str = preg_replace('/[^a-zA-Z]/', '', $str);
Run Code Online (Sandbox Code Playgroud)

要么

$str = preg_replace('/[^\w]/u', '', $str);
Run Code Online (Sandbox Code Playgroud)

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

任何的想法?

Joc*_*lyn 9

使用Unicode字符属性:

$str = preg_replace('/\P{L}+/u', '', $str);
Run Code Online (Sandbox Code Playgroud)


Pau*_*een 6

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

它将用UTF8支持替换所有非alpha字符.

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

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