使用 jQuery 验证插件自定义日期格式
Posted
技术标签:
【中文标题】使用 jQuery 验证插件自定义日期格式【英文标题】:Custom date format with jQuery validation plugin 【发布时间】:2010-10-05 09:59:07 【问题描述】:如何为 jQuery 指定要使用 Validation Plugin 验证的自定义日期格式?
【问题讨论】:
【参考方案1】:您可以使用addMethod
函数创建自己的自定义验证方法。假设您想验证“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
)
;
【讨论】:
@blasteralfred:// put your own logic here, this is just a (crappy) example
你能建议我一个语法来验证我所需的格式 DD-MM-YYYY 吗?我是 jquery 的初学者 .. :)
需要注意的是要把myDate
改成日期输入字段的名字。
您可以将示例 reg-ex 替换为;返回值.match(/^(((((0[1-9])|(1\d)|(2[0-8])))\/((0[1-9])|(1[ 0-2])))|((31\/((0[13578])|(1[02])))|((29|30)\/((0[1,3-9])| (1[0-2])))))\/((20[0-9][0-9])|(19[0-9][0-9])))|((29\/ 02\/(19|20)(([02468][048])|([13579][26])))))$/);这支持闰年检查。例如。 29/02/20014 将失败验证 29/02/2016 将通过验证。【参考方案2】:
nickf 的回答很好,但请注意,验证插件已经在 additional-methods.js 文件中包含了其他几种日期格式的验证器。在您自己编写之前,请确保尚未有人这样做。
【讨论】:
设置规则 dateISO: true,以 yyy-mm-dd 格式验证日期 太好了,谢谢!例如,“dd/mm/yyyy”格式有“dateITA”。【参考方案3】:我个人使用非常好的http://www.datejs.com/库。
Docco 在这里:http://code.google.com/p/datejs/wiki/APIDocumentation
您可以使用以下方法获取您的澳大利亚格式,并在 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
);
我也使用屏蔽输入插件来标准化数据http://digitalbush.com/projects/masked-input-plugin/
$("#birth_date").mask("99/99/9999");
【讨论】:
【参考方案4】:下面是一个新的验证方法示例,它可以验证几乎任何日期格式,包括:
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)?\d2$/);
,
"Please enter a date in the format!"
);
然后你添加新的过滤器:
$('#myForm')
.validate(
rules :
field:
anyDate: true
)
;
【讨论】:
为了包含mmm
,我将正则表达式稍微修改为/^(0?[1-9]|[12][0-9]|3[0-1])[/., -](0?[1-9]|1[0-2]|[a-zA-Z]3)[/., -](19|20)?\d2$/
【参考方案5】:
这是一个最近对我有用的特定代码示例:
// 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"
);
我应该注意到这实际上取代了内置的日期验证例程,尽管我看不出这会导致当前插件出现问题。
然后我将其应用于表单:
$( '#my_form input.date' ).rules( 'add', date: true );
【讨论】:
【参考方案6】:这是我结合/修改以前的帖子以达到我想要的结果:
// 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( ... ) 方法之后。
//Add date validation (if applicable)
$('.date', $(frmPanelBtnId)).each(function ()
$(this).rules('add',
date: true
);
);
最后,主要的isDate javascript函数修改为UK Date Format
//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 = /^(\d1,2)(\/|-)(\d1,2)(\/|-)(\d4)$/;
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;
【讨论】:
【参考方案7】:乔恩,你有一些语法错误,见下文,这对我有用。
<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
);
);
【讨论】:
【参考方案8】:$.validator.addMethod("mydate", function (value, element)
return this.optional(element) || /^(\d4)(-|\/)(([0-1]1)([1-2]1)|([0]1)([0-9]1))(-|\/)(([0-2]1)([1-9]1)|([3]1)([0-1]1))/.test(value);
);
你可以输入yyyy-mm-dd
也可以yyyy/mm/dd
但无法判断月份的大小,即 2 月 28 日或 29 天。
【讨论】:
【参考方案9】:@blasteralfred:
我得到以下规则为我验证正确的日期 (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\d2)/);
,
"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\d2)/);
,
"Please enter a valid date in the format DD/MM/YYYY"
);
这不会验证 2017 年 1 月 13 日和 2017 年 1 月 13 日。
而且也不验证 50 12 2017 和 50/12/2017。
【讨论】:
【参考方案10】:很简单,示例:适用于 HTML5 自动 type="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 = /^\d2([./-])\d2\1\d4$/;
return value.match(dateReg);
,
"Invalid date"
);
// Form Demo jquery.validate.min.js
$('#form-datos').validate(
submitHandler: function(form)
form.submit();
);
);
【讨论】:
以上是关于使用 jQuery 验证插件自定义日期格式的主要内容,如果未能解决你的问题,请参考以下文章