嗨,我实际上是尝试用这样的字符串替换所有非字母数字字符:
mb_ereg_replace('/[^a-z0-9\s]+/i','-',$string);
第一个问题是它不会从字符串中替换"."
之类的字符。
其次,我想为所有用户语言添加multybite支持。
我该怎么做?
感谢任何帮助,非常感谢。
答案 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)。