0

我正在使用 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 这样的值,它会使它无效。所以它正在考虑字符串的开头并忽略字符串部分的结尾。

有谁知道这其中的原因。

4

2 回答 2

2

来自:在 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++ find 中对其进行了测试。)除此之外,就像评论所说的那样,没有理由拥有如此复杂的正则表达式。

于 2013-05-06T07:02:29.023 回答
0

正如 Dracs 正确指出的那样,问题在于缺少括号。非常感谢您指出这一点。不使用 javascript 日期对象的原因是我们只需要在文本框中允许 mm/dd/yyyy 格式。所以很容易使用正则表达式来验证文本框。

于 2013-05-06T07:52:10.840 回答