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


Remove non-alphanumeric characters (including ß, Ê, etc.) from a string

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

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

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

像这样:

preg_replace('/[^'p{L}'p{N}'s]/u', '', $my_string);

正如arnaud576875已经提到的,您应该意识到,当像我这样使用u修饰符时,模式被视为UTF-8。相关手册页摘录:

u (PCRE8)

此修饰符打开PCRE的附加功能,即与Perl不兼容。模式字符串被视为UTF-8。这在Unix和PHP的PHP 4.1.0或更高版本中都可以使用modifier4.2.3在win32上。从PHP开始检查模式的UTF-8有效性4.3.5 .

使用unicode分类:

preg_replace("/[^'pL'pN'p{Zs}'-]/u", "", $my_string);