<html>
<head>
<script type="text/javascript">
function IsCharAndNumber(str) {
    var pattern = /^[a-zA-Z0-9]+$/g;
    return pattern.test(str);
}
alert(IsCharAndNumber("a3asd"));
alert(IsCharAndNumber("a3asd"));
alert(IsCharAndNumber("a3asd"));
alert(IsCharAndNumber("a3asd"));
alert(IsCharAndNumber("a3asd"));
alert(IsCharAndNumber("a3asd"));
</script>
</head>
<body>
</body>
</html>
上面代码在IE下总为true 在firefox下为循环一次true一次false  
请问原因是为什么和解决方法?

解决方案 »

  1.   

    将var pattern = /^[a-zA-Z0-9]+$/g;
    改为var pattern = /^[a-zA-Z0-9]+$/; 便正常了。
      

  2.   

    我是这样写的
    var pattern = /^[a-zA-Z0-9]/g$/;
      

  3.   

    也可以这样写function IsCharAndNumber(str) {
        var pattern = /^[a-zA-Z0-9]+$/g;
        pattern.lastIndex = 0;
        return pattern.test(str);
    }
      

  4.   

    两种方法你都说了。问题还是出在g上面的。
    引用网上的一段话带有"g"标记的正则表达式有一个属性lastIndex,该属性存放一个整数,它声明的是上一次匹配文本之后的第一个字符的位置。上次匹配的结果是由方法 RegExp.exec() 和 RegExp.test() 找到的,它们都以 lastIndex 属性所指的位置作为下次检索的起始点。这样,就可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本。该属性是可读可写的。只要目标字符串的下一次搜索开始,就可以对它进行设置。当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。看到这里我们不难看出问题出现的原因和解决方法了,只要我们在下次搜索之前把lastIndex属性重置为0即可