Custom date format with jQuery validation plugin
如何指定自定义日期格式以使用 jQuery 验证插件进行验证?
您可以使用 addMethod 函数创建自己的自定义验证方法。假设您想验证 “dd/mm/yyyy”:
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 } } }) ; |
- @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 ])|([135??79][26]))))$/);这支持闰年检查。例如。 29/02/20014 将失败验证 29/02/2016 将通过验证。
nickf\\ 的回答很好,但请注意,验证插件已经在附加方法.js 文件中包含了其他几种日期格式的验证器。在您自己编写之前,请确保尚未有人这样做。
- 设置规则 dateISO: true,以 yyy-mm-dd 格式验证日期
- 万分谢意!例如,”dd/mm/yyyy” 格式有 “dateITA”。
我个人使用非常好的 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({ |
我还使用屏蔽输入插件来标准化数据 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 } } }) |
;
- 为了包含 mmm,我使用了将正则表达式稍微修改为 /^(0?[1-9]|[12][0-9]|3[0-1])[/., -](0?[1-9]|1[0-2]|[a-zA-Z]{3})[/., -](19|20)?\\d{2}$/
这是一个最近对我有用的特定代码示例:
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 if (dtArray == null) //Checks for dd/mm/yyyy format. if (dtMonth < 1 || dtMonth > 12) 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( $(‘#testForm’).validate({ }); |
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); }); |
你可以像 yyyy-mm-dd 一样输入 yyyy/mm/dd
但无法判断月份的大小,即 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 // Form Demo jquery.validate.min.js }); |
来源:https://www.codenong.com/511439/