如何在 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 支持替换所有非字母字符的主要内容,如果未能解决你的问题,请参考以下文章