Javascript手机验证功能在IE8中不起作用

时间:2013-10-22 08:38:11

标签: javascript validation internet-explorer-8 replace split

我有javascript代码验证完成订单的电话号码。

function validatePhoneNumber(phone) {
    var trimPhone = phone.replace(new RegExp(" ","g"),'');  
    var phoneNumber = trimPhone.split(/\d/).length  - 1 ;           
    return phoneNumber >= 10 && phoneNumber <= 16 && phoneNumber === trimPhone.length ;
}

这是结帐按钮的代码

if(!validatePhoneNumber($('#phone').val())){
    $('#phone').css("color", "#ff0000");
    $('#invalidNumberFormat').show();
    submit = false;
}
else{
    $('#invalidNumberFormat').hide();
}

代码在Firefox和Chrome中运行良好,但在IE8中,它始终返回错误消息,指出字符串不在10到16个字符之间。

可能是什么原因?

1 个答案:

答案 0 :(得分:2)

您的代码:trimPhone.split(/\d/).length - 1

坦率地说,这是一个非常可怕的方法来找出一个字符串中有多少个数字字符!还有很多其他方法比这更好。

然而,更具体地说,这里的问题是你在IE8的正则表达式引擎中遇到了一个错误。

这是一个众所周知的错误:使用.split()时,结果包含连续匹配,IE8和更早版本将从结果数组中删除空元素。

尝试使用空值解析CSV内容时更常见 - 例如split(',','x,y,,z')将为您提供包含三个元素(xyz的结果)在IE8中,而其他浏览器也会在yz之间为您提供空元素。

对于CSV解析,修复问题有时很难,但是你的情况要容易得多,因为你真的不需要使用这种方法。

因此,本例中的解决方案是不使用此方法来计算数字。

我建议您尝试这样做:

var phoneNumber = trimPhone.replace(/[^\d]/g,'').length;