如何使用jquery以此格式validation日期(yyyy-mm-dd)?

我试图以这种格式validation日期:(yyyy-mm-dd)。 我找到了这个解决方案,但它的格式与我需要的格式不同,如:(mm / dd / yyyy)。

以下是该解决方案的链接: http : //jsfiddle.net/ravi1989/EywSP/848/

我的代码如下:

function isDate(txtDate) { var currVal = txtDate; if(currVal == '') return false; var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/; //Declare Regex var dtArray = currVal.match(rxDatePattern); // is format OK? if (dtArray == null) return false; //Checks for mm/dd/yyyy format. dtMonth = dtArray[1]; dtDay= dtArray[3]; dtYear = dtArray[5]; if (dtMonth  12) return false; else if (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; } 

我可以使用什么正则表达式模式来解释无效日期和闰年?

我稍微扩展了上面发布的isValidDate函数Thorbin(使用正则表达式)。 我们使用正则表达式来检查格式(以防止我们获得另一种对Date有效的格式)。 在这个松散检查之后,我们实际上通过Date构造函数运行它,如果在这种格式下有效,则返回true或false。 如果它不是有效日期,我们将从此函数中获取错误。

 function isValidDate(dateString) { var regEx = /^\d{4}-\d{2}-\d{2}$/; if(!dateString.match(regEx)) return false; // Invalid format var d = new Date(dateString); if(Number.isNaN(d.getTime())) return false; // Invalid date return d.toISOString().slice(0,10) === dateString; } /* Example Uses */ console.log(isValidDate("0000-00-00")); // false console.log(isValidDate("2015-01-40")); // false console.log(isValidDate("2016-11-25")); // true console.log(isValidDate("1970-01-01")); // true = epoch console.log(isValidDate("2016-02-29")); // true = leap day console.log(isValidDate("2013-02-29")); // false = not leap day 

如果这对你来说足够了,你也可以使用正则表达式来完成一个稍微简单的工作(例如[1]中所见)。

它们内置于javascript中,因此您可以在没有任何库的情况下使用它们。

 function isValidDate(dateString) { var regEx = /^\d{4}-\d{2}-\d{2}$/; return dateString.match(regEx) != null; } 

将是一个函数来检查给定的字符串是否是四个数字 – 两个数字 – 两个数字(几乎是yyyy-mm-dd)。 但是你可以用更复杂的表达式做更多事情,例如检查[2]。

 isValidDate("23-03-2012") // false isValidDate("1987-12-24") // true isValidDate("22-03-1981") // false isValidDate("0000-00-00") // true 

由于jQuery被标记,这是一个简单/用户友好的方式来validation必须是日期的字段(您将需要jQueryvalidation插件 ):

HTML

 

jQuery的

 $('#frm').validate({ rules: { date_creation: { required: true, date: true } } }); 

DEMO +示例


更新:经过一番挖掘后,我发现没有任何可用于设置特定日期格式的准备参数的证据。

但是,您可以在自定义规则中插入您选择的正则表达式:)

 $.validator.addMethod( "myDateFormat", function(value, element) { // yyyy-mm-dd var re = /^\d{4}-\d{1,2}-\d{1,2}$/; // valid if optional and empty OR if it passes the regex test return (this.optional(element) && value=="") || re.test(value); } ); $('#frm').validate({ rules: { date_creation: { // not optional required: true, // valid date date: true } } }); 

这条新规则意味着您的标记更新:

  

试试这里这是工作演示 :

 $(function() { $('#btnSubmit').bind('click', function(){ var txtVal = $('#txtDate').val(); if(isDate(txtVal)) alert('Valid Date'); else alert('Invalid Date'); }); function isDate(txtDate) { var currVal = txtDate; if(currVal == '') return false; var rxDatePattern = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/; //Declare Regex var dtArray = currVal.match(rxDatePattern); // is format OK? if (dtArray == null) return false; //Checks for mm/dd/yyyy format. dtMonth = dtArray[3]; dtDay= dtArray[5]; dtYear = dtArray[1]; 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; } }); 

改变正则表达式是:

 var rxDatePattern = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/; //Declare Regex 

我建议使用Using jquery validation插件和jquery ui日期选择器

 jQuery.validator.addMethod("customDateValidator", function(value, element) { // dd-mm-yyyy var re = /^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$/ ; if (! re.test(value) ) return false // parseDate throws exception if the value is invalid try{jQuery.datepicker.parseDate( 'dd-mm-yy', value);return true ;} catch(e){return false;} }, "Please enter a valid date format dd-mm-yyyy" ); this.ui.form.validate({ debug: true, rules : { title : { required : true, minlength: 4 }, date : { required: true, customDateValidator: true } } }) ; 

使用Jquery和日期选择器只需创建一个函数

 // dd-mm-yyyy var re = /^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$/ ; if (! re.test(value) ) return false // parseDate throws exception if the value is invalid try{jQuery.datepicker.parseDate( 'dd-mm-yy', value);return true ;} catch(e){return false;} 

您可以仅使用正则表达式进行validation

 // dd-mm-yyyy var re = /^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$/ ; return re.test(value) 

当然,日期格式应该是您所在的地区

将正则表达式重新排列为:

 /^(\d{4})([\/-])(\d{1,2})\2(\d{1,2})$/ 

我做的不仅仅是重新安排条款,我还做了它,以便它不会接受像yyyy-mm/dd这样的“破损”日期。

之后,你需要调整你的dtMonth等变量,如下所示:

 dtYear = dtArray[1]; dtMonth = dtArray[3]; dtDay = dtArray[4]; 

在那之后,代码应该可以正常工作。

工作演示在这里演绎

将validationfunction更改为此

 function isDate(txtDate) { return txtDate.match(/^d\d?\/\d\d?\/\d\d\d\d$/); } 

只需使用Date构造函数与字符串输入进行比较:

 function isDate(str) { return 'string' === typeof str && (dt = new Date(str)) && !isNaN(dt) && str === dt.toISOString().substr(0, 10); } console.log(isDate("2018-08-09")); console.log(isDate("2008-23-03")); console.log(isDate("0000-00-00")); console.log(isDate("2002-02-29")); console.log(isDate("2004-02-29")); 

您可以使用YYYY-MM-DD中的这个。 它检查它是否是有效日期并且该值不是NULL。 如果每个检查都是正确的,则返回TRUE如果任何内容无效,则返回FALSE 。 这不容易!

 function validateDate(date) { var matches = /^(\d{4})[-\/](\d{2})[-\/](\d{2})$/.exec(date); if (matches == null) return false; var d = matches[3]; var m = matches[2] - 1; var y = matches[1] ; var composedDate = new Date(y, m, d); return composedDate.getDate() == d && composedDate.getMonth() == m && composedDate.getFullYear() == y; } 

请注意,需要按月减去几个月: var m = matches[2] - 1; 否则new Date()实例将无法正确生成。