正则表达式用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;

浙公网安备 33010602011771号