0

我在验证日期时遇到问题,在我的代码中,我使用了一个接受 2012 年日期的正则表达式,如果我给出的日期为 2013 年,它会显示“无效日期”。请在这方面帮助我。它应该接受任何年份。我的意思是至少从 2000 年到 3000 年的有效年份。提前致谢。

function checkDates(){
  var sdate = "2013-01-02";
  var edate = "2013-01-02";

  if (!isValidDate(sdate)) {
         alert("Report Start Date is Invalid!!");
         return false;
    } 

    if (!isValidDate(edate)) {
     alert("Report End Date is Invalid!!");
     return false;
   }
   return true;
}


function isValidDate(sText) {

    var reDate = /(?:([0-9]{4}) [ -](0[1-9]|[12][0-9]|3[01])[ -]0[1-9]|1[012])/;  // yy/mm/dd
    return reDate.test(sText);
}
4

2 回答 2

6

您的正则表达式中有一个额外的空格并且缺少括号(括号问题使其接受2012-aa-xx日期:

/(?:([0-9]{4}) [ -](0[1-9]|[12][0-9]|3[01])[ -]0[1-9]|1[012])/
              ^                               ^
-------------/-------------------------------/

所以:

([0-9]{4}[ -](0[1-9]|[12][0-9]|3[01])[ -](0[1-9]|1[012]))
于 2013-01-02T09:18:48.133 回答
1

下面的表达式也有效

/(?:19|20\d{2})\-(?:0[1-9]|1[0-2])\-(?:0[1-9]|[12][0-9]|3[01])/

谢谢, 迪拉吉

于 2013-01-02T09:36:49.157 回答