簡體   English   中英

Javascript電話驗證功能在IE8中不起作用

[英]Javascript phone validation function doesn't work in IE8

我有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個字符之間。

可能是什么原因?

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

坦白說,這是找出一個字符串中有多少個數字字符的一種非常糟糕的方法! 還有許多其他方法會比這更好。

但是,更具體地說,這里的問題是您遇到了IE8的正則表達式引擎中的錯誤。

這是一個眾所周知的錯誤:當您使用.split() ,並且結果包含連續的匹配項且兩者之間沒有任何匹配時,IE8和更早版本將丟棄結果數組中的空元素。

通常是通過嘗試使用空值來解析CSV內容而觸發的-例如split(',','x,y,,z') )在IE8中將為您提供包含三個元素( xyz )的結果,而其他瀏覽器也會為您提供yz之間的空白元素。

對於CSV解析,有時很難解決問題,但是您的情況要容易得多,因為確實不需要使用此方法。

因此,這種情況下的解決方案是不使用此方法對數字進行計數。

我建議您嘗試以下替代方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM