より良い検証 (作業例を参照)。誕生日を尋ねる場合は、それが妥当かどうかも確認してみてはいかがでしょうか。最初の部分では、無効な日付 (その月の特定の範囲外の日付を含む範囲外) をチェックします。2番目の部分は、まだ生まれていない、または年を取りすぎてもっともらしくない人々を追い出します。
/**
* 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;
}