你好,我正在尝试替换字符串中所有非字母数字字符,比如这样:
mb_ereg_replace('/[^a-z0-9\s]+/i','-',$string);
第一个问题是它不能替换字符串中像"."
这样的字符。
其次,我希望为所有用户语言添加多字节支持。
我该如何做到这一点?
非常感谢您的帮助。
你好,我正在尝试替换字符串中所有非字母数字字符,比如这样:
mb_ereg_replace('/[^a-z0-9\s]+/i','-',$string);
第一个问题是它不能替换字符串中像"."
这样的字符。
其次,我希望为所有用户语言添加多字节支持。
我该如何做到这一点?
非常感谢您的帮助。
preg_replace('/[^\p{L}0-9\s]+/u', '-', $string);
使用正则表达式时,若带有u
标记,则\p{L}
(以及\p{Letter}
)匹配Unicode字母类别中的任意字符。
mb_ereg_replace()
,但是preg_replace()
应该可以使用,所以切换是一个可行的选择。 - Andrew Clark它应该将 .
替换为 -
,你可能是在一开始混淆了你的数据。
至于多字节支持,请添加 u
修饰符并查看 PCRE属性,即\ p {Letter}
:
$replaced = preg_replace('~[^0-9\p{Letter}]+~iu', '-', $string);
preg
)比扩展正则表达式(ereg
)更强大。 - Alix Axel
$result = preg_replace('~\P{Xan}++~u', '-', $string);
\p{Xan}
包含所有语言中的数字和字母,因此 \P{Xan}
包含所有不是字母或数字的内容。
这个表达式可以替换点号。对于多字节,请使用u
修饰符(UTF-8)。