【问题标题】:Javascript phone validation function doesn't work in IE8Javascript 电话验证功能在 IE8 中不起作用
【发布时间】:2013-10-31 00:46:42
【问题描述】:

我有 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 个字符之间。

可能是什么原因?

【问题讨论】:

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


    【解决方案1】:

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

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

    但是,更具体地说,这里的问题是您遇到了 IE8 的正则表达式引擎中的错误。

    这是一个众所周知的错误:当您使用.split(),并且结果包含连续匹配且它们之间没有任何内容时,IE8 及更早版本将丢弃结果数组中的空元素。

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

    对于 CSV 解析,有时可能很难解决问题,但您的情况要容易得多,因为您确实不需要使用这种方法。

    所以这里这种情况的解决方法是不要用这种方法来数位数。

    我建议您可以尝试以下替代方法:

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

    【讨论】:

    • 感谢您的回答,但没有奏效,它实际上使错误消息出现在每个浏览器上
    • 我认为您现在可能需要删除末尾的“ - 1”。我在一个 10 位数字上试了一下,结果是 9。
    • @Katana314:确实是的。嘿,那里有一个可爱的复制+粘贴错误。删除它。
    • @Spudley 这对我很有用,但我还是不明白它是如何工作的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多