function ddd() {
 var temp = " $";
  var reg = /[\'\";#-*%&]+/;
  alert(reg.test(temp))
}正则表达式中,并没有匹配美元符号$,但是alert的结果竟然是true,为什么啊 

解决方案 »

  1.   

    不诡异,是楼主不了解字符组的语法而已<script type="text/javascript"> 
    for(var i='#'.charCodeAt();i<='*'.charCodeAt();i++)
    {
        document.write(String.fromCharCode(i) + "<br />");
    }
    </script> 
    //输出
    #
    $
    %
    &
    '
    (
    )
    *[]支持用连字符“-”连接两个字符,来表示一个字符范围。需要注意的是,“-”前后的两个字符是有顺序的,即使用相同的编码时,后面的字符码位应大于或等于前面字符的码位。
    由于“#”和“*”符合要求,[#-*]可以一个字符范围,其中就包含了字符“$”,所以楼主的正则是可以匹配“$”的,如果不想要这样的效果,只是把“-”当作一个普通字符处理,那么要么换个位置,要么把“-”转义
    function ddd() { 
    var temp = " $"; 
      var reg = /[\'\";#\-*%&]+/; 
      alert(reg.test(temp)) 
      

  2.   


    function ddd() { 
      var temp = " $"; 
      var reg = /[\'\";#\-\*%&]+/; 
      alert(reg.test(temp)) 

      

  3.   


    这个 过客兄讲的很清楚了.
    主要就是字符组[]里连字符-的理解
    [a-z]: a-z之间的小写字母
    [-az]: 匹配- a z其中的任意一个