在网页里有个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 即可!