从字符串中删除非字母数字字符(包括ß,Ê等)

时间:2011-09-01 14:12:49

标签: php regex

是否有一种简单的方法可以从PHP中的字符串中删除所有非字母数字字符,这些字符不需要在正则表达式函数中单独列出它们?

我过去一直在使用preg_replace("/[^a-zA-Z0-9\s\'\-]/", "", $my_string);,但会过滤掉ÀÈÌÒÙß等重要字符。

我需要清理名称字段,因此不需要货币和数学字符/符号。

2 个答案:

答案 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);