您可以使用如下正则表达式检查日期在语法上是否正确:
/^(\d{1,2})([-\.\/])(\d{1,2})\2(\d{4})$/
^
并$
分别匹配字符串的开头和结尾
\d{1,2}
匹配 1 位或 2 位数字
\d{4}
完全匹配 4 位数字
\2
匹配在第二个捕获组 ( - . /
)中捕获的字符串
如果匹配,您可以使用匹配的日期、月份和年份来构建一个新日期,并将生成的日期、月份、年份与匹配的值进行比较。这是一个可以做到这一点的函数:
function checkDate(dateText) {
var match = dateText.match(/^(\d{1,2})([-\.\/])(\d{1,2})\2(\d{4})$/);
// "31.04.2012" -> ["31.04.2012", "31", ".", "04", "2012"]
if (match === null) {
return false;
}
var date = new Date(+match[4], +match[3] - 1, +match[1]);
return date.getFullYear() == +match[4] &&
date.getMonth() == +match[3] - 1 &&
date.getDate() == +match[1];
}
checkDate("30.04.2013"); // true
checkDate("31-04-2013"); // false (April has 30 days)
+
用于将字符串转换为数字(+"01"
变成1
)
- 月份从 0 开始(0 = 一月,1 = 二月,...)
- 上面的例子假设日期是
dd-mm-yyyy
格式
Date对象尝试更正无效日期。尝试创建一个日期,例如31-4-2013
yield 1-05-2013
,上面的函数将结果日期与输入参数进行比较以检查有效性。