4

嗨,我实际上正在尝试从这样的字符串中替换所有非字母数字字符:

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

第一个问题是它不会像"."字符串那样替换字符。

其次,我想为此方法添加对所有用户语言的多位支持。

我怎样才能做到这一点?

任何帮助appriciated,非常感谢。

4

4 回答 4

11

尝试以下操作:

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

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

于 2013-06-14T19:33:34.243 回答
1

它应该替换.-,您可能首先混淆了您的数据。

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

$replaced = preg_replace('~[^0-9\p{Letter}]+~iu', '-', $string);
于 2013-06-14T19:28:23.260 回答
1

最短的方法是:

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

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

于 2013-06-14T20:01:35.770 回答
0

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

于 2013-06-14T19:33:57.883 回答