PHP - 替换所有支持的语言的所有非字母数字字符

时间:2013-06-14 19:25:36

标签: php regex string replace multibyte

嗨,我实际上是尝试用这样的字符串替换所有非字母数字字符:

mb_ereg_replace('/[^a-z0-9\s]+/i','-',$string);

第一个问题是它不会从字符串中替换"."之类的字符。

其次,我想为所有用户语言添加multybite支持。

我该怎么做?

感谢任何帮助,非常感谢。

4 个答案:

答案 0 :(得分:8)

尝试以下方法:

preg_replace('/[^\p{L}0-9\s]+/u', '-', $string);

在正则表达式上使用u标志时,\p{L}(和\p{Letter})匹配任何Unicode字母类别中的任何字符。

答案 1 :(得分:1)

它应该将.替换为-,您可能首先会混淆数据。

对于多字节支持,添加u修饰符并查看PCRE properties,即\p{Letter}

$replaced = preg_replace('~[^0-9\p{Letter}]+~iu', '-', $string);

答案 2 :(得分:1)

最短的方式是:

$result = preg_replace('~\P{Xan}++~u', '-', $string);

\p{Xan}包含所有语言的数字和字母,因此\P{Xan}包含所有不是字母或数字的内容。

答案 3 :(得分:0)

此表达式确实取代了点。对于多字节使用u修饰符(UTF-8)。