9

我想从字符串中删除所有非字母字符。问题是我不知道字母范围,因为它是 UTF8 字符串。

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

我通常会这样做:

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

或者

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

但它们都清除了外来字符。

有任何想法吗?

4

3 回答 3

11

使用Unicode 字符属性

$str = preg_replace('/\P{L}+/u', '', $str);
于 2012-08-16T14:42:20.127 回答
8

更新:至于 Unicode,RegExp 看起来像这样[^\p{L}\s]+(不替换空格)

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

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

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

于 2012-08-16T14:37:38.677 回答
1

字母的 Unicode 属性是\pL,对于非字母是\PL

$str = preg_replace('/\PL+/u', '', $str);
于 2012-08-16T14:43:00.557 回答