我有一个javascript代码,应该测试一些特殊字符是否在这样的字符串中:
var string = prompt("write something here","hello");
if(string.search("+") != -1){alert("special character")}
if(string.search("(") != -1){alert("special character")}
if(string.search(")") != -1){alert("special character")}
if(string.search("[") != -1){alert("special character")}
if(string.search("]") != -1){alert("special character")}
if(string.search("*") != -1){alert("special character")}
if(string.search("\\") != -1){alert("special character")}
对于上面的所有特殊字符,它会显示一条错误消息(根据特殊字符的不同,+和*表示"意外的量词和#34;对于其他人,它说的是一些关于a正则表达式)。为什么会这样做,有什么解决方案? (我使用的是HTA所以不建议任何HTML5解决方案)
答案 0 :(得分:1)
String.prototype.search 需要一个正则表达式对象作为参数(读取它here)。 因此,为了搜索特殊字符,您必须先将其转义:
"anna+dan=?".search(/\+/)
另一方面,可能更容易使用 String.prototype.indexOf (阅读它here)
"anna+dan=?".indexOf("+")
答案 1 :(得分:1)
您需要转义特殊字符。你可以这样做:
var string = prompt("write something here","hello");
if(string.search(regex_escape("+")) != -1){alert("special character")}
if(string.search(regex_escape("(")) != -1){alert("special character")}
if(string.search(regex_escape(")")) != -1){alert("special character")}
if(string.search(regex_escape("[")) != -1){alert("special character")}
if(string.search(regex_escape("]")) != -1){alert("special character")}
if(string.search(regex_escape("*")) != -1){alert("special character")}
if(string.search(regex_escape("\\")) != -1){alert("special character")}
function regex_escape(str) {
return str.replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]', 'g'), '\\$&');
}
regex_escape()取自Escape a '+' plus sign in a string to be used in a regex in coffeescript/javascript
答案 2 :(得分:1)
search
方法使用正则表达式,因此您尝试的所有字符都必须转义才能以这种方式使用。
如果要查找角色,则应使用indexOf
方法。例如:
if (string.indexOf("+") != -1) { alert("special character"); }
如果您希望问题中的代码按预期工作,您可以利用search
使用的正则表达式,并一次检查所有字符:
var string = prompt("write something here","hello");
if (string.search(/[+()[\]*\\]/) != -1) { alert("special character"); }
包含字符[]
的字符集(+()[]*\
)的正则表达式。请注意,字符]
和\
需要转发为\]
和\\
。集合中的其他字符不需要转义,因为它们在集合中没有特殊含义。