正则表达式用test匹配时需要注意全局匹配

今天做了一个简单的手机验证正则,就是当文本框失去焦点时给予用户提示;

为了防止自己以后忘记,所以记录下来下次翻看;

var
reg_phone=/^\d{11}$/g,  //简单的判断是否为11为数字
phone_s=jq(".input_text_phone"),
phone_v='';

phone_s.blur(function(){
  phone_v=jq.trim(jq(this).val());
  if(reg_phone.test(phone_v)){//神奇的发现这里明明验证对的,但是第一次为TRUE,第二次却为false,很是不解
    jq(this).next().hide();
  }
  else{
    jq(this).next().show();
  }
})

 

本例中稍作修改:reg_phone=/^\d{11}$/g 把全局标志g去掉即可;

 

后来看到了别人的解释:

test()继承正则表达式的lastIndex属性,当第二次调用test()的时候,lastIndex指向下一次匹配所在位置11,所以第二次匹配不成功,lastIndex重新指向0,等于第三次又重新匹配;

解决方法:将test()的lastIndex属性每次重新指向0,re.lastIndex = 0; 

 

posted @ 2014-08-15 14:45  栀子(⊙_⊙)  阅读(258)  评论(0)    收藏  举报