我已经创建了一个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;
}
答案 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/
的变化:
答案 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
}