Javascript 什么';在yyyy dd mm中验证日期格式的add方法有误吗?

Javascript 什么';在yyyy dd mm中验证日期格式的add方法有误吗?,javascript,regex,validation,date,Javascript,Regex,Validation,Date,我正在尝试验证yyyy dd mm中的日期格式。我正在通过下面的验证器matod尝试这一点。它正在使用/^(\d{4})(\d{1,2})()(\d{1,2})$/regex验证日期。当我尝试使用/^((?:19 | 20)\d\d)-(0[1-9]| 1[012])-(0[1-9]|[12][0-9]| 3[01])$/验证它时,它工作错误 jQuery.validator.addMethod( "validateDateFormat", function(value, element) {

我正在尝试验证yyyy dd mm中的日期格式。我正在通过下面的验证器matod尝试这一点。它正在使用
/^(\d{4})(\d{1,2})()(\d{1,2})$/
regex验证日期。当我尝试使用
/^((?:19 | 20)\d\d)-(0[1-9]| 1[012])-(0[1-9]|[12][0-9]| 3[01])$/
验证它时,它工作错误

jQuery.validator.addMethod(
"validateDateFormat",
function(value, element) {
    var currVal = value;
    if (currVal != '') {
        var rxDatePattern = /^(\d{4})(-)(\d{1,2})(-)(\d{1,2})$/;
        //var rxDatePattern = /^((?:19|20)\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/;
        var dtArray = currVal.match(rxDatePattern);
        if (dtArray == null){

               return false;
        }
        dtYear = dtArray[1];
        dtMonth= dtArray[3];
        dtDay = dtArray[5];

        if (dtMonth < 1 || dtMonth > 12)
            return false;
        else if (dtDay < 1 || dtDay > 31)
            return false;
        else if ((dtMonth == 4 || dtMonth == 6 || dtMonth == 9 || dtMonth == 11) && dtDay == 31)
            return false;
        else if (dtMonth == 2)
        {
            var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0));
            if (dtDay > 29 || (dtDay == 29 && !isleap))
                    return false;
        }
    }

    return true;
},
     "Please enter a valid date, date format should be (yyyy-mm-dd)."
);
jQuery.validator.addMethod(
“validateDateFormat”,
函数(值、元素){
var currVal=价值;
如果(currVal!=''){
var rxDatePattern=/^(\d{4})()(\d{1,2})()(\d{1,2})$/;
//var rxDatePattern=/^((?:19 | 20)\d\d)-(0[1-9]| 1[012])-(0[1-9]|[12][0-9]| 3[01])$;
var dtArray=currVal.match(rxDatePattern);
if(dtArray==null){
返回false;
}
dtYear=dtArray[1];
dtMonth=dtArray[3];
dtDay=dtArray[5];
如果(dtMonth<1 | | dtMonth>12)
返回false;
否则如果(dtDay<1 | | dtDay>31)
返回false;
否则如果((dtMonth==4 | | dtMonth==6 | | dtMonth==9 | | dtMonth==11)和&dtDay==31)
返回false;
否则如果(dtMonth==2)
{
var isleap=(dtYear%4==0&&(dtYear%100!=0 | | dtYear%400==0));
如果(dtDay>29 | |(dtDay==29&&!isleap))
返回false;
}
}
返回true;
},
请输入有效日期,日期格式应为(yyyy-mm-dd)
);
我在此尝试验证的内容:

  • 只允许int和“-”
  • 日期仅允许采用YYYY-MM-DD格式
  • YYYY应大于1900且应为4整数
  • MM应介于01到12之间,且应为2个字符
  • DD应该在01到31之间,并且应该是2个字符

  • 正则表达式不是设计用来进行数值处理的


    保持简单。使用regex来匹配基本模式并提取相关的令牌,然后对您得到的数字应用您的数字和其他业务规则。以后需要维护时,您会感谢您自己。

    您的正则表达式对我来说似乎有效。。但它也将接受无效日期(2000-02-31)。。。也许这会对你有所帮助:请同时说明否决投票的原因。你的问题有些不明确。。。“工作出错”可能是任何事情。错误的日期会被接受吗?正确的日期不被接受吗?示例?我已经处理了闰年。我在这里只发布了一小段需要帮助的代码。我已经解决了这个问题。但在发布这个问题7天后,人们投了反对票。伟大的我在正则表达式中错过了正确的分组。在正则表达式修正之后,一切都按照我的要求进行了。
    /^((?:19 | 20)\d\d)()(0[1-9]| 1[012])((0[1-9]|[12][0-9]| 3[01])$/