我在javascript中使用正则表达式验证日期。我正在使用的正则表达式是
/^(((((0?[1-9])|(1\d)|(2[0-8]))\/((0?[1-9])|(1[0-2])))|((31\/((0?[13578])|(1[02])))|((29|30)\/((0?[1,3-9])|(1[0-2])))))\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\/02\/(19|20)(([02468][048])|([13579][26]))))$/
这准确匹配日期,但它会匹配诸如的值 1/1 / 2001ff即使我用$来标记字符串的结尾。 但是,如果我给出像ff1 / 1/2001这样的值,它会使它无效。所以它考虑了字符串的开头并忽略了字符串部分的结束。
有谁知道这个的原因。
答案 0 :(得分:2)
来自:Detecting an "invalid date" Date instance in JavaScript
if ( Object.prototype.toString.call(d) === "[object Date]" ) {
// it is a date
if ( isNaN( d.getTime() ) ) { // d.valueOf() could also work
// date is not valid
}
else {
// date is valid
}
}
else {
// not a date
}
逻辑上,检查日期是否有效而不是使用正则表达式来匹配日期更有意义。但是,如果您正在尝试搜索日期,那么您的正则表达式仍然有效(例如,我在Notepad ++中进行了测试。)除此之外,就像评论所说的那样,没有理由这么复杂正则表达式。
答案 1 :(得分:0)
正如Dracs正确指出的那样,问题是缺少括号。非常感谢您指出这一点。 不使用javascript日期对象的原因是我们只需要在文本框中允许mm / dd / yyyy格式。因此,使用正则表达式验证文本框很容易。