【问题标题】:Validate date in both 'mm-dd-yyyy' and 'mm/dd/yyyy' formats using JQuery Validate使用 JQuery Validate 以“mm-dd-yyyy”和“mm/dd/yyyy”格式验证日期
【发布时间】: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 = /^(\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;

            } 
    }); 

【问题讨论】:

    标签: javascript php jquery validation jquery-ui


    【解决方案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');
      }
    });
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2016-01-02
          • 1970-01-01
          • 2014-08-14
          • 2014-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-06
          相关资源
          最近更新 更多