2013-10-22 91 views
1

我有驗證電話號碼以完成訂單的JavaScript代碼。Javascript手機驗證功能在IE8中不起作用

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個字符。

可能是什麼原因?

回答

2

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

坦率地說,這是找出字符有多少位是在一個串一個非常可怕的方式!還有其他一些方法會比這更好。

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

這是一個相當知名的錯誤:當您使用.split(),並且結果包含連續的匹配而它們之間沒有任何內容時,IE8和更早版本將從結果數組中丟棄空元素。

它更普遍試圖解析CSV內容與空值觸發 - 例如split(',','x,y,,z')會給你在IE8三個要素(xyz)的結果,而其他瀏覽器也會給你們之間的空元素yz

對於CSV解析,它有時可能相當難以解決問題,但您的情況更容易,因爲您確實不需要使用此方法。

所以這裏的解決方案是不使用這種方法來計算數字。

我的建議是作爲一種替代你可以嘗試:

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

感謝您的回答,但沒有奏效,這實際上使每個瀏覽器 –

+0

我想你現在可能需要刪除錯誤信息出現最後的「 - 1」。我試了一個10位數字,它給了我9 – Katana314

+0

@ Katana314:是的。嘿,一個可愛的複製+粘貼錯誤那裏。刪除它。 – Spudley