JavaScript中的许可证号验证

时间:2011-11-22 07:13:37

标签: javascript

我已经创建了一个JavaScript函数来验证美国驾驶执照。问题是功能取决于浏览器。这是函数在IE中创建错误但在MOZILLA和CHROME中运行良好..

我已经验证了它,因为前三位应该是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;
    }

3 个答案:

答案 0 :(得分: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对象一次,然后使用该引用而不是每次都检索
  • 通过设置为“”清除字段,而不是空。

答案 1 :(得分:1)

使用[0-3]进行检查,前三位数字应介于0和3之间。检查链接以制作正则表达式
http://rick.measham.id.au/paste/explain.pl

答案 2 :(得分:0)

在您的代码中:

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

这将匹配字符串开头的零个或多个数字的序列。要检查字符串是否以0到9范围内的至少3位数字开头,请使用:

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
}