2016-11-23 31 views
1

使用JQuery驗證驗證'mm-dd-yyyy'和'mm/dd/yyyy'格式的日期。使用JQuery驗證'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; 

      } 
    }); 

回答

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

感謝它爲我工作:) – user6527

0

您可以檢查對兩名regexs我懷疑你可能一直在試圖避免的。

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

如果您不擔心治療混合分隔符(如DD-MM/YYYY)爲有效,那麼最簡單的方法可能是在你的正則表達式使用[\-\/]而不是\/

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