2011-11-22 138 views
0

我已經創建了用於驗證美國駕駛執照的JavaScript函數。問題是功能依賴於瀏覽器。也就是說功能在IE中產生的錯誤,但在Mozilla和Chrome運行正常..JavaScript中的許可證編號驗證

我已經驗證了它作爲第一個三位數字應該是0或1或2或3

//license number 
    var strFilter = /^[0-9]*$/; 
    var chkVal36 = document.getElementById("license").value; 
    var chkVal37 = document.getElementById("license").value.length; 
    var chkVal38 = document.getElementById("license").value; 

    if ((!strFilter.test(chkVal36)) || ((chkVal36 !== "") && (chkVal36 === 0)) || (chkVal36 !== "") || (chkVal37 !== 8) || ((chkVal38[0] !== 0) && (chkVal38[0] !== 1) && (chkVal38[0] !== 2) && (chkVal38[0] !== 3))) { 
     alert("Please enter valid 8-digit license number\r\n(Only digits)"); 
     document.getElementById("license").focus(); 
     document.getElementById("license").style.background = "#DFE32D"; 
     document.getElementById("license").value = null; 
     return false; 
    } 
+1

你會得到什麼錯誤?您應該刪除所有對document.getElementById的額外調用,並將其替換爲:var license = document.getElementById(「license」);我也會改變你的正則表達式爲/^[0-9] + $ /,因爲+會匹配1或更多,那麼你不需要檢查一個空字符串。 – row1

+0

如果我使用輸入'12332111',那麼它會返回錯誤和警報。根據我的情況,我已經用0-3中的任何一個數字1 –

+0

@ row1:你能否以正確的方式寫下它。 –

回答

3

在老版本的IE中,您不能像chkVal38[0]那樣執行字符串數組索引。

我建議這種清理和簡化代碼:

//license number 
var strFilter = /^[0-3][0-9]{7}$/; 
var obj = document.getElementById("license"); 

if (!strFilter.test(obj.value)) { 
    alert("Please enter valid 8-digit license number\r\n(Only digits)"); 
    obj.focus(); 
    obj.style.background = "#DFE32D"; 
    obj.value = ""; 
    return false; 
} 

工作示例這裏:http://jsfiddle.net/jfriend00/ZUajd/

變化:

  • 感動了所有驗證到單一的正則表達式(主要0- 3,所有數字和8個總字符)。
  • 檢索DOM對象一次,然後使用該引用而不是每次都檢索它
  • 通過設置爲「」而不是空來清除該字段。
0

在您的代碼:

> var strFilter = /^[0-9]*$/; var chkVal36 = 

,將在一個字符串的開頭匹配零個或多個數字的序列。要檢查一個字符串範圍內至少3個數字0到9開始,使用方法:

var strFilter = /^[0-9]{3}/; 

如果你想一些其他的範圍,把它放在方括號。以下內容:

> var chkVal36 = document.getElementById("license").value; 
> var chkVal37 = document.getElementById("license").value.length; 
> var chkVal38 = document.getElementById("license").value; 

這應該是這樣的:

var licenceNumber = document.getElementById("license").value; 

字符的許可證數量可以直接作爲licenceNumber.length訪問。所以...

if (!strFilter.test(licenceNumber)) { 
    // deal with error - doesn't start with 3 digits 
} 
if (licenceNumber.length != 8) { 
    // deal with error - wrong number of characters 
}