firefox在String对象的test方法中的表现

本文介绍了一个关于在不同浏览器中使用JavaScript正则表达式进行身份证后四位验证的问题。详细讨论了在Firefox和IE浏览器下表现不一致的原因,并给出了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在网页里有个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 方法来修改。

由于ie“容忍"了全局修正符,使得网页看起来“正常”。实际上,Firefox较为规范。

 

解决方法

 

去掉修正符 g 即可!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值