此RegEx用于从搜索表单中清除用户输入
$query = preg_replace("/[^A-Za-z0-9 _.,*&-]/", ' ', $query);
我也需要将斜杠添加为有效字符,但是如果我添加它,我会收到错误。我想我必须逃避它,但找不到怎么做
$query = preg_replace("/[^A-Za-z0-9 _.,*&-/]/", ' ', $query); // doesn't works
$query = preg_replace("/[^A-Za-z0-9 _.,*&-//]/", ' ', $query); // doesn't works
$query = preg_replace("/[^A-Za-z0-9 _.,*&-\/]/", ' ', $query); // doesn't works
使用php
答案 0 :(得分:4)
你应该转义两次 - 你需要创建字符串"\/"
,所以反斜杠也应该以{{1}}转义:
"\\/"
另外,请确保将$query = preg_replace("/[^A-Za-z0-9 _.,*&\\/-]/", ' ', $query);
移到最后,或者将其移除。它在字符集中有两个不同的字符。
答案 1 :(得分:4)
您可以使用除/
之外的其他内容作为分隔符 - 尝试以下内容:
$query = preg_replace("%[^A-Za-z0-9 _.,*&-/]%", ' ', $query);
在这种情况下,Kobe也发布了正确的逃避方法,但是当我将分隔符切换到我在表达式中没有使用的东西时,我发现正则表达式更易读。
修改强>
可以在http://www.php.net/manual/en/regexp.reference.delimiters.php找到一些其他信息(在此引用它:)
“使用PCRE函数时,需要使用分隔符包围模式。分隔符可以是任何非字母数字,非反斜杠,非空白字符。”
答案 2 :(得分:2)
$query = preg_replace("/[^A-Za-z0-9 _.,*&-\/]/", ' ', $query);
如果用单引号编写它,会起作用,如下所示:
$query = preg_replace('/[^A-Za-z0-9 _.,*&\/-]/', ' ', $query);
原因在于“被解析为\ n,\ r \ n \ t \ t \ n等和$ vars。因此;转义/使PHP尝试找到”/“的特殊含义,如”\“ n“当它失败时,它会删除反斜杠。
括号中的字符串未被解析。
答案 3 :(得分:1)
要逃避角色,只需在其前面放一个反斜杠;但是不要忘记你正在使用双引号字符串 - 这可能是使这更难的原因:你可能必须用反斜杠本身。
我通常使用的另一个解决方案是使用你的正则表达式中没有的不同的正则表达式分隔符。例如,使用#
:
$query = preg_replace("#[^A-Za-z0-9 _.,*&-/]#", ' ', $query);
这应解决问题: - )