正则表达式删除除字母数字和空格之外的任何内容(在PHP中)

jef*_*kee 11 php regex

我试图通过正则表达式删除除字母数字字符和空格之外的所有字符.

这是我希望实现的转换.

"I am a string" ? "I am a string"
"How are you?" ? "How are you"
"#53-Jeff" ? "53-Jeff"
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这个:

return preg_replace("/[^0-9a-zA-Z]/","", $val);
Run Code Online (Sandbox Code Playgroud)

但作为一个正则表达式的新手,我无法弄清楚如何插入空格.我尝试的时候结果很奇怪.

pok*_*oke 25

插入空格就像您期望的那样简单:

preg_replace("/[^0-9a-zA-Z ]/", "", $val);
Run Code Online (Sandbox Code Playgroud)

顺便说一句.你的第三个例子对我来说不清楚:你想替换它-吗?如果没有,您还需要将其添加到角色列表中.

有关正在运行的示例,请参阅此

  • 是的,方括号基本上是正则表达式的字符序列.它们匹配任何内部指定的字符,除非它的前缀是`^`,这意味着它的意思.因此,您匹配除指定的字符之外的任何字符.两个值之间的`-`只是公共范围的捷径; 所以`[0-9]`基本上与`[0123456789]`相同. (4认同)

Reg*_*ent 6

这应该工作:

preg_replace("/[^0-9a-zA-Z -]/", "", $val);
Run Code Online (Sandbox Code Playgroud)

请记住在字符集块的最后添加" - ",否则它可能会被解释为范围运算符.

根据您的正则表达式标志(如空白/注释),因此您可能需要替换" "(右前"-")有"\s"或(更严格)"\ ".

  • 不是在PCRE,但发现它值得一提,因为它值得了解这些陷阱.并非所有正则表达式都是平等的.ICU提到的这个问题曾经偷走了我一个小时的生命.我从来没有想到它允许在char集中忽略空格.可能是一个错误,而不是一个实现细节. (2认同)