【问题标题】:How to replace all non-alphabetic characters with UTF-8 support in PHP如何在 PHP 中用 UTF-8 支持替换所有非字母字符
【发布时间】:2012-08-12 22:32:46
【问题描述】:

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

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

我通常会这样做:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: php regex utf-8 preg-replace


    【解决方案1】:

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

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

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

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

    【讨论】:

    • “Alphabetic”并不意味着仅使用英文字符。
    • @cleong,对不起,我的错,错过了这一点。我已经更正了我的答案。
    • 我认为这两个答案都很棒,但我认为这有更多信息
    【解决方案2】:

    使用Unicode character properties

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

    【讨论】:

    • 附带说明,当使用 u 标志时,值得一提的是指定 Unicode 字符类的语法。代码点周围需要大括号。例如,[\x{0400}-\x{04FF}] 匹配常规西里尔字母范围内的任何字符。
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-11
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2014-04-15
      • 1970-01-01
      相关资源
      最近更新 更多