使用JQuery Validate以'mm-dd-yyyy'和'mm / dd / yyyy'格式验证日期

时间:2016-11-23 11:00:41

标签: javascript php jquery validation jquery-ui

使用JQuery Validate以'mm-dd-yyyy'和'mm / dd / yyyy'格式验证日期。

我尝试使用一种格式的代码,但是,我的代码(如下所示)不适用于'mm-dd-yyyy'和'mm / dd / yyyy'格式。 我的代码:

$(document).on('blur','.dateValidation',function(){ 

            var input=$(this).val();
            var r = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
            if(!r.test(input)) {
              alert("Invalid Input");
              return;
            }
            var a = input.match(r), d = new Date(a[3],a[1] - 1,a[2]);
            if(d.getFullYear() != a[3] || d.getMonth() + 1 != a[1] || d.getDate() != a[2]) {
              alert("Invalid Date");
              return;

            } 
    }); 

3 个答案:

答案 0 :(得分:1)

您可以在数组中添加您支持的日期格式并在其上循环。例如,使用这样的函数:

function isValidDate(input) {
  var regexes = [
    /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/,
    /^(\d{1,2})\-(\d{1,2})\-(\d{4})$/
  ];

  for (var i = 0; i < regexes.length; i++) {
    var r = regexes[i];
    if(!r.test(input)) {
      continue;
    }
    var a = input.match(r), d = new Date(a[3],a[1] - 1,a[2]);
    if(d.getFullYear() != a[3] || d.getMonth() + 1 != a[1] || d.getDate() != a[2]) {
      continue;
    }
    // All checks passed:
    return true;
  }

  return false;
}

然后你可以从代码中调用它:

$(document).on('blur','.dateValidation',function(){ 
  var isValid = isValidDate($(this).val());
  if (isValid) {
    alert('Valid date');
  } else {
    alert('Invalid date');
  }
});

答案 1 :(得分:0)

你可以检查我怀疑你可能试图避免的两个正则表达式。

    var input=$(this).val();
    var r1 = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
    var r2 = /^(\d{1,2})-(\d{1,2})-(\d{4})$/;

    var a;
    if (r1.test(input)) {
      a = input.match(r1);
    } else if (r2.test(input) {
      a = input.match(r2);
    } else {
      alert("Invalid Input");
      return;
    }

    var d = new Date(a[3],a[1] - 1,a[2]);
    if (d.getFullYear() != a[3] || 
        d.getMonth() + 1 != a[1] || 
        d.getDate() != a[2]) {
      alert("Invalid Date");
      return;
    } 

如果您愿意使用外部js库。我会使用Moment.js

var d = moment($(this).val(), ["D-M-YYYY", "D/M/YYYY"], true); 
if(d == null || !d.isValid()) {
    alert('Invalid Date');
}

答案 2 :(得分:0)

如果您不担心将混合分隔符(例如dd-mm / yyyy)视为有效,那么最简单的方法可能是在您的正则表达式中使用[\-\/]而不是\/

var r = /^(\d{1,2})[\-\/](\d{1,2})[\-\/](\d{4})$/;