[英]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中將為您提供包含三個元素( x
, y
和z
)的結果,而其他瀏覽器也會為您提供y
和z
之間的空白元素。
對於CSV解析,有時很難解決問題,但是您的情況要容易得多,因為確實不需要使用此方法。
因此,這種情況下的解決方案是不使用此方法對數字進行計數。
我建議您嘗試以下替代方法:
var phoneNumber = trimPhone.replace(/[^\d]/g,'').length;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.