嗨,我实际上是在尝试替换字符串中的所有非字母数字字符,像这样:
mb_ereg_replace('/[^a-z0-9's]+/i','-',$string);
第一个问题是它不能从字符串中替换"."
这样的字符。
其次,我想为这个方法添加对所有用户语言的多字节支持。
我该怎么做呢?
任何帮助都很感激,非常感谢。
尝试如下:
preg_replace('/[^'p{L}0-9's]+/u', '-', $string);
当在正则表达式上使用u
标志时,'p{L}
(和'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)