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

Javascript regular expression does not match till the end of the string

本文关键字:正则表达式 字符串 Javascript      更新时间:2023-09-26

我在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这样的值,它就会失效。所以它只考虑字符串的开头部分,而忽略字符串的结尾部分。

有人知道这是为什么吗

From:检测到"无效日期";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中测试了它)。除此之外,就像评论所说的,没有理由使用如此复杂的正则表达式。

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