2011-11-22 140 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 
}