我正在尝试使用javascript正则表达式验证日期输入,但它返回的有效日期无效。我不是正则表达式的专家,所以我不知道它有什么问题:
/^([0-9]d{2})+(\.|-|\/)+([0-9]d{2})+(\.|-|\/)+([0-9]d{4})+$/
我希望接受这些日期格式:
23/04/2001
23-04-2001
2001年4月23日
最初我有这个,但它最终接受了与其他角色的约会,如23/04 / 2001jhsdgf:
/\d{2}(\.|-|\/)\d{2}(\.|-|\/)\d{4}/;
答案 0 :(得分:4)
使用原始正则表达式,然后将新版本中的^
和$
添加到其中。问题解决了。
编辑:虽然,(\.|-|\/)
确实是一团糟,而应该是[.\/-]
。
编辑2:也就是说,如果您创建第一个([.\/-])
,那么您可以用\1
替换第二个,然后它将需要两个分隔符相同。
答案 1 :(得分:4)
您可以使用正则表达式检查日期在语法上是否正确:
/^(\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
)dd-mm-yyyy
格式 Date对象尝试更正无效日期。尝试创建31-4-2013
生成1-05-2013
之类的日期时,上述函数会将结果日期与输入参数进行比较,以检查其有效性。