嗨,我实际上正在尝试从这样的字符串中替换所有非字母数字字符:
mb_ereg_replace('/[^a-z0-9\s]+/i','-',$string);
第一个问题是它不会像"."
字符串那样替换字符。
其次,我想为此方法添加对所有用户语言的多位支持。
我怎样才能做到这一点?
任何帮助appriciated,非常感谢。
尝试以下操作:
preg_replace('/[^\p{L}0-9\s]+/u', '-', $string);
当u
标志用于正则表达式时,\p{L}
(and \p{Letter}
) 匹配任何 Unicode 字母类别中的任何字符。
它应该替换.
为-
,您可能首先混淆了您的数据。
至于多字节支持,添加u
修饰符并查看PCRE 属性,即\p{Letter}
:
$replaced = preg_replace('~[^0-9\p{Letter}]+~iu', '-', $string);
最短的方法是:
$result = preg_replace('~\P{Xan}++~u', '-', $string);
\p{Xan}
包含所有语言的数字和字母,因此\P{Xan}
包含所有不是字母或数字的内容。
此表达式确实替换了点。对于多字节使用u
修饰符 (UTF-8)。