在网页里有个input,表示身份证后四位:
<input type='text' id='idkeyLastFour' tabIndex='3' class='text m' maxlength='4' onblur='validate_idkeyLastFour();' />
然后,在js里用正则去验证其有效性:
function validate_idkeyLastFour() {
var idkeyLastFour = document.getElementById('idkeyLastFour');
var re = /^\d{3}(\d|x)$/ig;
if(!re.test(idkeyLastFour.value)) {
dealError(idkeyLastFour, '请填写身份证后四位');
return false;
}
dealOk(idkeyLastFour);
return true;
}
问题来了------
在IE下,函数符合预期;在Firefox下,validate_idkeyLastFour()交替返回true和false。
原因:
函数中的正则表达式里的修正符"g",它表示全局,而test方法只在字符串中匹配单次,下面是来自《js手册》关于test方法的一句解释:
js手册 写道
test 方法检查在字符串中是否存在一个模式,如果存在则返回 true,否则就返回 false。
全局 RegExp 对象的属性不由 test 方法来修改。
全局 RegExp 对象的属性不由 test 方法来修改。
由于ie“容忍"了全局修正符,使得网页看起来“正常”。实际上,Firefox较为规范。
解决方法:
去掉修正符 g 即可!
本文介绍了一个关于在不同浏览器中使用JavaScript正则表达式进行身份证后四位验证的问题。详细讨论了在Firefox和IE浏览器下表现不一致的原因,并给出了相应的解决方案。
3073

被折叠的 条评论
为什么被折叠?



