自定义date格式与jQueryvalidation插件

我怎样才能指定一个自定义的date合成与validation插件的jQuery validation ?

您可以使用addMethod函数创build自己的自定义validation方法。 假设你想validation“dd / mm / yyyy”:

 $.validator.addMethod( "australianDate", function(value, element) { // put your own logic here, this is just a (crappy) example return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/); }, "Please enter a date in the format dd/mm/yyyy." ); 

然后在你的表单上添加:

 $('#myForm') .validate({ rules : { myDate : { australianDate : true } } }) ; 

nickf的答案是好的,但请注意,validation插件已经在additional-methods.js文件中包含了其他几种date格式的validation器。 在你自己写之前,确保有人还没有完成它。

我个人使用非常好的http://www.datejs.com/库。;

Docco在这里: http : //code.google.com/p/datejs/wiki/APIDocumentation

您可以使用以下方式获取您的澳大利亚格式,并validation闰日29/02/2012而非29/02/2011:

 jQuery.validator.addMethod("australianDate", function(value, element) { return Date.parseExact(value, "d/M/yyyy"); }); $("#myForm").validate({ rules : { birth_date : { australianDate : true } } }); 

我也使用蒙面input插件来标准化数据http://digitalbush.com/projects/masked-input-plugin/

 $("#birth_date").mask("99/99/9999"); 

下面是一个validation几乎任何date格式的新validation方法的例子,其中包括:

  • dd / mm / yy或dd / mm / yyyy
  • dd.mm.yy或dd.mm.yyyy
  • dd,mm,yy或dd,mm,yyyy
  • dd mm yy或dd mm yyyy
  • dd-mm-yy或dd-mm-yyyy

然后,当你将值传递给php时,可以将它转换为strtotime

这里是如何添加方法:

  $.validator.addMethod("anyDate", function(value, element) { return value.match(/^(0?[1-9]|[12][0-9]|3[0-1])[/., -](0?[1-9]|1[0-2])[/., -](19|20)?\d{2}$/); }, "Please enter a date in the format!" ); 

然后你添加新的filter:

 $('#myForm') .validate({ rules : { field: { anyDate: true } } }) 

;

以下是最近为我工作的特定代码示例:

 // Replace the builtin US date validation with UK date validation $.validator.addMethod( "date", function ( value, element ) { var bits = value.match( /([0-9]+)/gi ), str; if ( ! bits ) return this.optional(element) || false; str = bits[ 1 ] + '/' + bits[ 0 ] + '/' + bits[ 2 ]; return this.optional(element) || !/Invalid|NaN/.test(new Date( str )); }, "Please enter a date in the format dd/mm/yyyy" ); 

我应该注意到,这实际上取代了内置的datevalidation例程,但我看不出这会导致当前插件的问题。

然后,我使用这个表单来使用:

 $( '#my_form input.date' ).rules( 'add', { date: true } ); 

这是我结合/修改以前的post,以达到我想要的结果:

  // Override built-in date validator $.validator.addMethod( "date", function (value, element) { //Return NB: isRequired is not checked at this stage return (value=="")? true : isDate(value); }, "* invalid" ); 

在validationconfiguration后添加datevalidation。 即在调用$(form).validate({…})方法之后。

  //Add date validation (if applicable) $('.date', $(frmPanelBtnId)).each(function () { $(this).rules('add', { date: true }); }); 

最后,主要是为英国date格式修改的dateJavascriptfunction

 //Validates a date input -- http://jquerybyexample.blogspot.com/2011/12/validate-date- using-jquery.html function isDate(txtDate) { var currVal = txtDate; if (currVal == '') return false; //Declare Regex var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; var dtArray = currVal.match(rxDatePattern); // is format OK? if (dtArray == null) return false; //Checks for dd/mm/yyyy format. var dtDay = dtArray[1]; var dtMonth = dtArray[3]; var dtYear = dtArray[5]; if (dtMonth < 1 || dtMonth > 12) return false; else if (dtDay < 1 || dtDay > 31) return false; else if ((dtMonth == 4 || dtMonth == 6 || dtMonth == 9 || dtMonth == 11) && dtDay == 31) return false; else if (dtMonth == 2) { var isleap = (dtYear % 4 == 0 && (dtYear % 100 != 0 || dtYear % 400 == 0)); if (dtDay > 29 || (dtDay == 29 && !isleap)) return false; } return true; } 

乔恩,你有一些语法错误,见下文,这对我工作。

  <script type="text/javascript"> $(document).ready(function () { $.validator.addMethod( "australianDate", function (value, element) { // put your own logic here, this is just a (crappy) example return value.match(/^\d\d?\/\d\d?\/\d\d\d\d$/); }, "Please enter a date in the format dd/mm/yyyy" ); $('#testForm').validate({ rules: { "myDate": { australianDate: true } } }); }); 

查看: jQuery Masked Input Plugin

 $.validator.addMethod("mydate", function (value, element) { return this.optional(element) || /^(\d{4})(-|\/)(([0-1]{1})([1-2]{1})|([0]{1})([0-9]{1}))(-|\/)(([0-2]{1})([1-9]{1})|([3]{1})([0-1]{1}))/.test(value); }); 

你可以input像yyyy-mm-dd也是yyyy/mm/dd

但无法判断2月份某个时间的大小,仅仅是28或29天。

很简单,例如: 适用于HTML5自动types=“date”

 <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"></script> <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/additional-methods.min.js"></script> <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/localization/messages_es.js"></script> $(function () { // Overload method default "date" jquery.validate.min.js $.validator.addMethod( "date", function(value, element) { var dateReg = /^\d{2}([./-])\d{2}\1\d{4}$/; return value.match(dateReg); }, "Invalid date" ); // Form Demo jquery.validate.min.js $('#form-datos').validate({ submitHandler: function(form) { form.submit(); } }); }); 

@blasteralfred:

我有以下规则确认我的正确date(DD MM YYYY)

 jQuery.validator.addMethod( "validDate", function(value, element) { return value.match(/(?:0[1-9]|[12][0-9]|3[01]) (?:0[1-9]|1[0-2]) (?:19|20\d{2})/); }, "Please enter a valid date in the format DD MM YYYY" 

);

对于DD / MM / YYYY

 jQuery.validator.addMethod( "validDate", function(value, element) { return value.match(/(?:0[1-9]|[12][0-9]|3[01])\/(?:0[1-9]|1[0-2])\/(?:19|20\d{2})/); }, "Please enter a valid date in the format DD/MM/YYYY" 

);

这不会validation2017年1月13日和2017年1月13日。

而且也不会validation2017年5月15日和2017年5月12日。