如何删除非字母数字字符?

我需要从一个string中删除所有字符不在az AZ 0-9设置或不是空格。

有没有人有这样做的function?

听起来你几乎已经知道你想要做什么,你基本上定义为一个正则expression式。

 preg_replace("/[^A-Za-z0-9 ]/", '', $string); 

对于unicode字符,它是:

 preg_replace("/[^[:alnum:][:space:]]/u", '', $string); 

正则expression式就是你的答案。

 $str = preg_replace('/[^az\d ]/i', '', $str); 
  • i代表不区分大小写。
  • ^意味着,不开始。
  • \d匹配任何数字。
  • az匹配az之间a所有字符。 由于i参数,您不必指定azAZ
  • \d有一个空格,所以在这个正则expression式中允许有空格。

这是一个非常简单的正则expression式:

 \W|_ 

并根据需要使用它(带有正斜杠/斜线分隔符)。

 preg_replace("/\W|_/", '', $string); 

在这里用这个伟大的工具来testing它,解释了正则expression式在做什么:

http://www.regexr.com/

我也在寻找答案,我的意图是清理每一个非alpha,不应该有一个以上的空间。
所以,我修改了Alex的答案,这对我来说是preg_replace('/[^az|\s+]+/i', ' ', $name)
上面的正则expression式把sy8ed sirajul7_islamsy ed sirajul islam
说明:正则expression式将 区分大小写的方式或多个空格,从a到z 勾选,它会被转换为一个空格。

 preg_replace("/\W+/", '', $string) 

你可以在这里testing它: http : //regexr.com/

 [\W_]+ 
 $string = preg_replace("/[\W_]+/u", '', $string); 

它select所有不是AZ,az,0-9并删除它。

请看这里的例子: https : //regexr.com/3h1rj

我使用这个:

 //to remove non english character $str = preg_replace('/[^\00-\255]+/u', '', $str);