我有3个文本框,如下所示
<input type="text" name="birth_year" id="birth_year" maxLength="4" size="4">Year
<input type="text" name="birth_month" id="birth_month" maxLength="2" size="2">Month
<input type="text" name="birth_day" id="birth_day" maxLength="2" size="2">Day
[2012] Year [09] Month [13] Day
如何使用JQ验证该日期?
我已经搜索了两天。
我找不到像XXXX-XX-XX这样格式的东西。
我找到了this jsFiddle,但是这个没有验证两个数字的月份或日期,如03或22
非常感谢任何帮助
答案 0 :(得分:0)
实际上非常简单:
var year = document.getElementsByName("birth_year")[0].value,
month = document.getElementsByName("birth_month")[0].value,
day = document.getElementsByName("birth_day")[0].value,
date = new Date(year + "-" + month + "-" + day);
if (isNaN(date.getTime())) {
// The date is invalid
}
不幸的是,这在IE8等旧浏览器中不起作用,因为它们不接受yyyy-mm-dd日期格式。但你可以像这样重写日期:
var date = new Date(month + "/" + day + "/" + year);
(我认为格式mm / dd / yyyy毫无意义,但是......这就是Javascript自第一次定义以来的工作方式。)
答案 1 :(得分:0)
更好的验证(参见working example)。如果你要求过生日,为什么不检查它们是否合理?第一部分检查无效日期(超出范围,包括该月特定范围之外的日期);第二部分是那些尚未出生的人,或者说太旧而不合理的人。
/**
* input is year/month/day (month from 1 to 12, day from 1 to 31)
* output is boolean: true if correct and in-range, false if not
*/
function isValidBirthdate(year, month, day, minAge, maxAge) {
// javascript days expect zero-based days and months
month --; day --;
var saysWasBorn = new Date(year, month, day);
if (saysWasBorn.getDate() != day
|| saysWasBorn.getMonth() != month
|| saysWasBorn.getFullYear() != year) {
console.log("impossible date: ");
return false;
}
var now = new Date();
var yearsOld = now.getFullYear() - saysWasBorn.getFullYear();
if ((now.getMonth()*40 + now.getDate() - 1) <
(saysWasBorn.getMonth()*40 + saysWasBorn.getDate())) {
yearsOld --;
}
if (yearsOld > maxAge) {
console.log("too old");
return false;
} else if (yearsOld < minAge) {
console.log("too young");
return false;
}
return true;
}