<input type=button  onclick="test()" value="why???">
<script>
   var pattern = /^[\d]{8}$/g   function test() {
  // var pattern = /^[\d]{8}$/g
       if(("12345678").match(pattern)) {
  alert("it's Yes");
   } else {
  alert("it's No");
   }
   }   function getPattern() {
return /^[\d]{8}$/g;
   }
</script>
这个与全局和局部变量关系好像不大,
因该是你的匹配方法造成的
test和exec的方法完成匹配後,停留在找到匹配位置的后面,
如果找不到匹配才能放回到字符的开始位置,因此就会出现一个yes一个no的情况。
如果用match方法,就不必考虑全局局部了个人意见,仅供参考

解决方案 »

  1.   

    这样的贴子已经发过不少了
    加g的patten在match后,lastIndex变化了,patten已经不是原来的patten.
    当你再匹配的时候,匹配不到,lastIndex就又是0了,所以就这样交替着.
      

  2.   

    非常感谢楼上~~
    我改用match后的确可以。
    如此看来,pattern去做校验匹配时,它真会保留上一次结果。
    所以如果是全局变量,它的匹配状态被保存了,所以有上述异常
    局部变量就不一样了,每次是一个新的pattern
    可以这样理解吧?
      

  3.   

    引:“局部变量就不一样了,每次是一个新的pattern“不是pattern不一样,而是经过一次匹配之后,
    重新查找时,由于匹配的位置变化造成的匹配结果差异。
      

  4.   

    用pattern.compile();重新编译一下就行了,相当于初始化。
    <input type=button onclick="test()" value="why???">
    <script>
       var pattern = /^[\d]{8}$/g;   function test() {
       //var pattern = /^[\d]{8}$/
    s ="12345678";
    pattern.compile();
           if(pattern.test(s)) {
      alert("it's Yes");
       } else {
      alert("it's No");
       }
       }   function getPattern() {
    return /^[\d]{8}$/g;
       }
    </script>
      

  5.   

    谢谢各位的参与,这个问题也是第一次碰到! 学到了。。
    解决方法总结:
    1, 用match方法代替test
    2, 去掉 g 参数限定
    3, 用compile()初始化