使用JQueryvalidation以dd / mm / yyyy格式validation日期

我正在记录出生日期和死亡日期。 需要validation

  1. 死亡日期应超过出生日期
  2. 日期格式为dd / mm / yyyy
  3. 日期小于或等于今天。

validation无法按预期工作,无法解决问题。 请帮忙。

小提琴代码

使用JS库

  1. Calendar / Datepicker的JQuery UI
  2. JQueryvalidation表单validation
  3. validation库的其他方法

    var today = new Date(); var authorValidator = $("#itemAuthorForm").validate({ rules : { dateOfBirth : { required : false, date : true, dateITA : true, dateLessThan : '#expiredDate' }, expiredDate : { required : false, date : true, dateITA : true, dateGreaterThan : "#dateOfBirth" } }, onfocusout : function(element) { if ($(element).val()) { $(element).valid(); } } }); var dateOptionsDOE = { maxDate : today, dateFormat : "dd/mm/yy", changeMonth : true, changeYear : true, onClose : function(selectedDate) { $("#dateOfBirth").datepicker("option", "maxDate", selectedDate); } }; var dateOptionsDOB = { maxDate : today, dateFormat : "dd/mm/yy", changeMonth : true, changeYear : true, onClose : function(selectedDate) { $("#expiredDate").datepicker("option", "minDate", selectedDate); } }; jQuery.validator.addMethod("dateGreaterThan", function(value, element, params) { if ($(params).val() === "") return true; if (!/Invalid|NaN/.test(new Date(value))) { return new Date(value) > new Date($(params).val()); } return isNaN(value) && isNaN($(params).val()) || (Number(value) > Number($(params).val())); }, 'Must be greater than {0}.'); jQuery.validator.addMethod("dateLessThan", function(value, element, params) { if ($(params).val() === "") return true; if (!/Invalid|NaN/.test(new Date(value))) { return new Date(value) < new Date($(params).val()); } return isNaN(value) && isNaN($(params).val()) || (Number(value) < Number($(params).val())); }, 'Must be less than {0}.'); $("#expiredDate").datepicker( $.extend({}, $.datepicker.regional['en-GB'], dateOptionsDOE)); $("#dateOfBirth").datepicker( $.extend({}, $.datepicker.regional['en-GB'], dateOptionsDOB)); 

您不需要datevalidation器。 它不支持dd / mm / yyyy格式 ,这就是为什么你得到“请输入有效日期”消息的输入,如13/01/2014。 您已经拥有dateITAvalidation器,它根据您的需要使用dd / mm / yyyy格式。

就像datevalidation器一样, dateGreaterThandateLessThan代码为输入字符串调用new Date ,并且解析日期时遇到同样的问题。 您可以使用这样的函数来解析日期:

 function parseDMY(value) { var date = value.split("/"); var d = parseInt(date[0], 10), m = parseInt(date[1], 10), y = parseInt(date[2], 10); return new Date(y, m - 1, d); } 

这也将在闰年检查。 这是纯正则表达式,所以它比任何lib都快(也比moment.js快)。 但是如果你要在你的代码中使用很多日期,我建议你使用moment.js

 var dateRegex = /^(?=\d)(?:(?:31(?!.(?:0?[2469]|11))|(?:30|29)(?!.0?2)|29(?=.0?2.(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(?:\x20|$))|(?:2[0-8]|1\d|0?[1-9]))([-.\/])(?:1[012]|0?[1-9])\1(?:1[6-9]|[2-9]\d)?\d\d(?:(?=\x20\d)\x20|$))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\x20[AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/; console.log( dateRegex.test( $('your input').val() ) ); 

在此处输入图像描述

HTTP://regexper.com / ….

如果您使用时刻js库,它可以很容易地像这样 –

 jQuery.validator.addMethod("validDate", function(value, element) { return this.optional(element) || moment(value,"DD/MM/YYYY").isValid(); }, "Please enter a valid date in the format DD/MM/YYYY"); 

我在项目中遇到了类似的问题。 经过艰苦的努力,我找到了这个解决方案:

 if ($.datepicker.parseDate("dd/mm/yy","17/06/2015") > $.datepicker.parseDate("dd/mm/yy","20/06/2015")) // do something 

对于此问题,您不需要像jQuery Validate或Moment.js这样的插件。 希望此解决方案有所帮

这validation了dd / mm / yyy日期。 编辑你的jquery.validate.js并添加它们。

参考(正则表达式):正则表达式validation日期格式dd / mm / yyyy

 dateBR: function( value, element ) { return this.optional(element) || /^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/.test(value); } messages: { dateBR: "Invalid date." } classRuleSettings: { dateBR: {dateBR: true} } 

用法:

  $( "#myForm" ).validate({ rules: { field: { dateBR: true } } }); 

这对我来说很好。

 $(document).ready(function () { $('#btn_move').click( function(){ var dateformat = /^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/; var Val_date=$('#txt_date').val(); if(Val_date.match(dateformat)){ var seperator1 = Val_date.split('/'); var seperator2 = Val_date.split('-'); if (seperator1.length>1) { var splitdate = Val_date.split('/'); } else if (seperator2.length>1) { var splitdate = Val_date.split('-'); } var dd = parseInt(splitdate[0]); var mm = parseInt(splitdate[1]); var yy = parseInt(splitdate[2]); var ListofDays = [31,28,31,30,31,30,31,31,30,31,30,31]; if (mm==1 || mm>2) { if (dd>ListofDays[mm-1]) { alert('Invalid date format!'); return false; } } if (mm==2) { var lyear = false; if ( (!(yy % 4) && yy % 100) || !(yy % 400)) { lyear = true; } if ((lyear==false) && (dd>=29)) { alert('Invalid date format!'); return false; } if ((lyear==true) && (dd>29)) { alert('Invalid date format!'); return false; } } } else { alert("Invalid date format!"); return false; } }); });