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

Posted

技术标签:

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

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

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

我通常会这样做:

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

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

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

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

\PL+ - 匹配任何非字母符号 \pP+ - 仅删除标点符号

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

Tutorial on RegExp UTF8 Unicode character properties

【讨论】:

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

使用Unicode character properties:

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

【讨论】:

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

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

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

【讨论】:

以上是关于如何在 PHP 中用 UTF-8 支持替换所有非字母字符的主要内容,如果未能解决你的问题,请参考以下文章

如何在PHP中用正则表达式替换所有实际上不是空格的空格

如何在 PHP 中的变量中用空格替换制表符?

如何在 PHP 中用单个空格正确替换多个空格?

如何在android studio中用另一个片段替换一个片段

如何在 C# 中用 %20 替换所有空格?

PHP - 在 URL 中用 https 替换 http