-2

我正在尝试验证 yyyy-dd-mm 中的日期格式。我正在通过下面的验证器 matod 尝试这个。它使用/^(\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 个字符。
4

1 回答 1

2

正则表达式不是为进行数值处理而设计的。

把事情简单化。使用正则表达式匹配基本模式并提取相关标记,然后将您的数字和其他业务规则应用于您获得的数字。当您以后需要维护它时,您会感谢自己。

于 2013-05-30T06:24:28.867 回答