Javascript正则表达式直到字符串结尾才匹配

时间:2013-05-06 06:53:36

标签: javascript regex

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

有谁知道这个的原因。

2 个答案:

答案 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格式。因此,使用正则表达式验证文本框很容易。