问题一:
<script language="javascript">
var re = new RegExp("^\d+$");
if(!re.test("d")){
alert("非数字!");
}
</script>
没有提示,也就是把d当成数字了。
<script language="javascript">
var re = new RegExp("^\d+$");
if(!re.test("a")){
alert("非数字!");
}
</script>
a正常。<script language="javascript">
var re = new RegExp("^[0-9]+$");
if(!re.test("a")){
alert("非数字!");
}
</script>
正常了,也就是[0-9]不等价于\d,怎么回事?问题二:
<script language="javascript">
re = new RegExp("^[1-3]?[0-9]?[0-9](\.[0-9]+)?$");
str = "2g2";
if(re.test(str.toString())) alert("ok");
else alert("not ok");
</script>2g2 怎么会ok呢?

解决方案 »

  1.   

    js中正则有两种声明方式,以字符串形式声明正则时,要用\\来转义\<script language="javascript">
    var re = new RegExp("^\\d+$");
    if(!re.test("d")){
    alert("非数字!");
    }
    </script>参考
    正则基础之——神奇的转义 
      

  2.   

    当然你也可以通过另一种方式声明正则
    <script language="javascript">
    var re = /^\d+$/;
    if(!re.test("d")){
    alert("非数字!");
    }
    </script>第二个也是同样的问题,小数点没有转义,所以第二个正则相当于
    re = /^[1-3]?[0-9]?[0-9](.[0-9]+)?$/;
    这样为什么ok,我想楼主就能分析出来了吧<script type="text/javascript">
    re = new RegExp("^[1-3]?[0-9]?[0-9](\\.[0-9]+)?$");
    str = "2g2";
    if(re.test(str.toString())) alert("ok");
    else alert("not ok");
    </script>