在javascript中,我有一个包含来自HTML表单的13位ID号的var。此ID号的前6位数字是格式的出生日期:YYMMDD。
输入示例:9409201234987; 其中94是年份,09是月份,20天。
我需要验证这个生日,以便:
如果其中任何一个都是假的,我的函数需要返回false。
到目前为止,这是我的功能:
function validateID(idNum, errors) {
if (!/^\d{13}$/.test(idNum.value)) {
errors.innerHTML = "ID Number must be 13 numerical digits";
return false;
}
var year = idNum.value.substring(0, 3);
var month = idNum.value.substring(3, 5);
var day = idNum.value.substring(5, 7);
if (year > 97 || year < 20) {
errors.innerHTML = "Year is outside of range (1920 - 1997)";
return false;
} else if (month > 12 || month < 1) {
errors.innerHTML = "Month is outside of range (1 - 12)";
return false;
} else if (day > 31 || day < 1) {
errors.innerHTML = "Day is outside of range (1 - 31)";
return false;
}
}
参数:idNum是HTML表单输入,类型为text。错误是我的HTML中的一个div,用于输出错误。
子串显然不适合我,有人可以建议一个不同的方法,最好使用正则表达式。谢谢!
答案 0 :(得分:3)
您的子字符串参数错误。结束参数是从0开始的,而不是从1开始的。此外,您应该使用parseInt()
将字符串转换为数字。
var year = parseInt(idNum.value.substring(0, 2), 10);
var month = parseInt(idNum.value.substring(2, 4), 10);
var day = parseInt(idNum.value.substring(4, 6), 10);
您还可以在进行正则表达式匹配时提取它们。
if (!(match = /^(\d{2})(\d{2})(\d{2})\d{7}$/.test(idNum.value)) {
errors.innerHTML = "ID Number must be 13 numerical digits";
return false;
}
var year = parseInt(match[1], 10);
var month = parseInt(match[2], 10);
var day = parseInt(match[3], 10);