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

Posted

技术标签:

【中文标题】使用 JQuery Validate 以“mm-dd-yyyy”和“mm/dd/yyyy”格式验证日期【英文标题】:Validate date in both 'mm-dd-yyyy' and 'mm/dd/yyyy' formats using JQuery Validate 【发布时间】:2017-04-07 08:29:20 【问题描述】:

使用 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 = /^(\d1,2)\/(\d1,2)\/(\d4)$/;
            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;

             
    ); 

【问题讨论】:

【参考方案1】:

您可以将您支持的日期格式放入一个数组中并循环使用。例如这样的函数:

function isValidDate(input) 
  var regexes = [
    /^(\d1,2)\/(\d1,2)\/(\d4)$/,
    /^(\d1,2)\-(\d1,2)\-(\d4)$/
  ];

  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');
  
);

【讨论】:

【参考方案2】:

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

    var input=$(this).val();
    var r1 = /^(\d1,2)\/(\d1,2)\/(\d4)$/;
    var r2 = /^(\d1,2)-(\d1,2)-(\d4)$/;

    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');

【讨论】:

【参考方案3】:

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

var r = /^(\d1,2)[\-\/](\d1,2)[\-\/](\d4)$/;

【讨论】:

以上是关于使用 JQuery Validate 以“mm-dd-yyyy”和“mm/dd/yyyy”格式验证日期的主要内容,如果未能解决你的问题,请参考以下文章

jquery validate 与 jquery 工具冲突

jQuery Validate:在 ASP.NET MVC 5 应用程序中添加事件以提交按钮单击

jQuery validate:如何为正则表达式验证添加规则?

修改正则表达式以检查 sting 是不是在 jquery validate 中不包含电子邮件地址

如何在 jQuery Validate 中标记必填字段

jquery.validate使用攻略(表单校验)