javascript search()方法中不允许使用某些特殊字符

时间:2015-04-26 12:11:03

标签: javascript

我有一个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解决方案)

3 个答案:

答案 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

这是小提琴:http://jsfiddle.net/dahark0v/1/

答案 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"); }

包含字符[]的字符集(+()[]*\)的正则表达式。请注意,字符]\需要转发为\]\\。集合中的其他字符不需要转义,因为它们在集合中没有特殊含义。