【问题标题】:Some special characters are not permitted in javascript search() methodjavascript search() 方法中不允许使用某些特殊字符
【发布时间】:2015-04-26 12:11:02
【问题描述】:

我有一个 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")}

对于上面的所有特殊字符,它会向我显示一条错误消息(根据特殊字符而有所不同,对于 + 和 *,它表示“意外的量词”,而对于其他字符,它表示有关正则表达式的信息)。为什么要这样做,有什么解决方案? (我正在使用 HTA,所以不建议任何 HTML5 解决方案)

【问题讨论】:

  • .search 似乎正在使用正则表达式,因此您可能想使用 .indexOf 代替。 .search,事实上,因为接受正则表达式的事实,如果你使用了一些与正则表达式相关的字符,它总是会提示你。使用 .indexOf 而不是 .search 一切都会按预期工作。 jsfiddle.net/Lhkhvxwg
  • 阅读documentationstring.search接受正则表达式
  • 呃,string.search() 不完全是“javascript替换方法”?!
  • @Bergi:不确定,似乎不是返回匹配项,而是返回匹配项在字符串中的位置。
  • @briosheje:如果要返回匹配项,请使用 matchexec(也不是 replace

标签: javascript


【解决方案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"); }

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

【讨论】:

    【解决方案2】:

    您需要转义特殊字符。你可以这样做:

    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/

    【讨论】:

      【解决方案3】:

      String.prototype.search 需要一个正则表达式对象作为参数(阅读它here)。 因此,为了搜索特殊字符,您必须先对其进行转义:

      "anna+dan=?".search(/\+/)
      

      另一方面,只使用 String.prototype.indexOf 可能更容易(阅读它here

      "anna+dan=?".indexOf("+")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多