add方法验证yyyy-dd-mm格式的日期有什么问题?

What's wrong in add method to validate date format in yyyy-dd-mm?

本文关键字:什么 问题 日期 方法 验证 yyyy-dd-mm 格式 add      更新时间:2023-09-26

我正在尝试验证yyyy-dd-mm格式的日期。我正在尝试下面的验证器方法。它通过使用/^('d{4})(-)('d{1,2})(-)('d{1,2})$/正则表达式验证日期。当我试图使用/^((?: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)."
);

我想验证的是:

  1. 只允许int和"-"。
  2. 日期只支持YYYY-MM-DD格式。
  3. YYYY应该大于1900并且应该是4 int。
  4. MM应该在01到12之间,应该是2个字符。
  5. DD应该在01到31之间,应该是2个字符。

正则表达式不是用来做数值处理的。

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