我是学javascript的新手,这两天在写表单验证时碰到一个困惑的问题:
<script type="text/javascript">
function testRe()
{
   var regName = /ab/g;
   var b = regName.test("ababab");
   document.getElementById("textid").value=b;
}
</script>
<input type="button" onclick="testRe()" value="Test"/>
<input type="text" id="textid"  />这段代码在firefox和在IE运行时不一样,在firefox,按钮按三下就变成false了,而在IE永远是true,好像firefox
记住ab的位置,而IE没有记住,为什么会这样呢,会不会在表单验证时造成困扰啊

解决方案 »

  1.   

    改成这样就可以了function testRe() {
      var regName = /ab/g;
      regName.lastIndex = 0;
      var b = regName.test("ababab");
      document.getElementById("textid").value=b;
    }在标准的 JavaScript 中带有 g 参数时,匹配时会记住上一次所匹配到的位置,即从上一次匹配的后面开始继续进行匹配,
    如果匹配不到的话就将匹配位置设为初始状态。这个状态主要是由 RegExp 对象的 lastIndex 属性控制的,这个属性仅在
    RegExp 对象带有 g 标志时才有作用。IE 并没有按照标准来走。解决办法有两种:1,去掉 g 标志;
    2,将 RegExp 对象的 lastIndex 强行置为初始值 0。
      

  2.   

    这可能和浏览器的实现有关。
    不过你这样写不太规范。test()是RegExp对象的方法
    将var regName = /ab/g; 改为var regName = new RegExp(/ab/g);
    在两个浏览器中就会显示一致。