是否有一种简单的方法可以从PHP中的字符串中删除所有非字母数字字符,这些字符不需要在正则表达式函数中单独列出它们?
我过去一直在使用preg_replace("/[^a-zA-Z0-9\s\'\-]/", "", $my_string);
,但会过滤掉ÀÈÌÒÙß
等重要字符。
我需要清理名称字段,因此不需要货币和数学字符/符号。
答案 0 :(得分:6)
像这样:
preg_replace('/[^\p{L}\p{N}\s]/u', '', $my_string);
正如arnaud576875已经提到过的,你应该知道在使用u
修饰符的时候,模式被视为UTF-8。相关摘录appropriate manual page:
你是(PCRE8)此修饰符打开PCRE的其他功能 与Perl不兼容。模式字符串被视为UTF-8。这个 在Unix和PHP上,可以从PHP 4.1.0或更高版本获得修饰符 4.2.3在win32上。自PHP以来检查模式的UTF-8有效性 4.3.5。
答案 1 :(得分:1)
使用unicode类别:
preg_replace("/[^\pL\pN\p{Zs}'-]/u", "", $my_string);