Custom date format with jQuery validation plugin
如何指定自定义日期格式以使用 jQuery 验证插件进行验证?
您可以使用
1 2 3 4 5 6 7 8 | $.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." ); |
然后在你的表单上添加:
1 2 3 4 5 6 7 8 9 | $('#myForm') .validate({ rules : { myDate : { australianDate : true } } }) ; |
nickf\\ 的回答很好,但请注意,验证插件已经在附加方法.js 文件中包含了其他几种日期格式的验证器。在您自己编写之前,请确保尚未有人这样做。
我个人使用非常好的 http://www.datejs.com/ 库。
Docco 在这里:http://code.google.com/p/datejs/wiki/APIDocumentation
您可以使用以下方法获取澳大利亚格式,并在 29/02/2012 而不是 29/02/2011 验证闰日:
1 2 3 4 5 6 7 8 9 | jQuery.validator.addMethod("australianDate", function(value, element) { return Date.parseExact(value,"d/M/yyyy"); }); $("#myForm").validate({ rules : { birth_date : { australianDate : true } } }); |
我还使用屏蔽输入插件来标准化数据 http://digitalbush.com/projects/masked-input-plugin/
1 | $("#birth_date").mask("99/99/9999"); |
这是一个新的验证方法的例子,它可以验证几乎所有的日期格式,包括:
- 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
进行转换
添加方法如下:
1 2 3 4 5 6 | $.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!" ); |
然后你添加新的过滤器:
1 2 3 4 5 6 7 8 | $('#myForm') .validate({ rules : { field: { anyDate: true } } }) |
;
这是一个最近对我有用的特定代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 | // 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" ); |
我应该注意到这实际上取代了内置的日期验证例程,尽管我看不出这会导致当前插件出现问题。
然后我将它应用到表单中:
1 | $( '#my_form input.date' ).rules( 'add', { date: true } ); |
这是我结合/修改以前的帖子以达到我想要的结果:
1 2 3 4 5 6 7 8 9 | // 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" ); |
在您的验证配置之后添加日期验证。 IE。在调用 $(form).validate({ ... }) 方法之后。
1 2 3 4 5 6 | //Add date validation (if applicable) $('.date', $(frmPanelBtnId)).each(function () { $(this).rules('add', { date: true }); }); |
最后将主要的isDate Javascript函数修改为UK Date Format
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | //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; } |
乔恩,你有一些语法错误,见下文,这对我有用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <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 } } }); }); |
1 2 3 4 5 | $.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); }); |
你可以像
但无法判断月份的大小,即 2 月 28 或 29 天。
@blasteralfred:
我得到以下规则为我验证正确的日期 (DD MM YYYY)
1 2 3 4 5 6 | 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
1 2 3 4 5 6 | 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" |
);
这不会验证 2017 年 1 月 13 日和 2017 年 1 月 13 日。
也不验证 50 12 2017 和 50/12/2017。
很简单,示例:适用于 HTML5 自动 type="date".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js"> <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/additional-methods.min.js"> <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/localization/messages_es.js"> $(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(); } }); }); |