Javascript 如何使用jquery验证此格式(yyyy-mm-dd)的日期?
我正在尝试验证以下格式的日期:(yyyy-mm-dd)。我找到了这个解决方案,但它的格式与我需要的格式不符,如:(mm/dd/yyyy) 以下是该解决方案的链接: 我的代码如下:Javascript 如何使用jquery验证此格式(yyyy-mm-dd)的日期?,javascript,jquery,Javascript,Jquery,我正在尝试验证以下格式的日期:(yyyy-mm-dd)。我找到了这个解决方案,但它的格式与我需要的格式不符,如:(mm/dd/yyyy) 以下是该解决方案的链接: 我的代码如下: function isDate(txtDate) { var currVal = txtDate; if(currVal == '') return false; var rxDatePattern = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4
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 < 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;
}
函数isDate(txtDate)
{
var currVal=txtDate;
如果(currVal='')
返回false;
var rxDatePattern=/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;//声明正则表达式
var dtArray=currVal.match(rxDatePattern);//格式正确吗?
if(dtArray==null)
返回false;
//检查mm/dd/yyyy格式。
dtMonth=dtArray[1];
dtDay=dtArray[3];
dtYear=dtArray[5];
如果(dtMonth<1 | | dtMonth>12)
返回false;
否则如果(dtDay<1 | | dtDay>31)
返回false;
否则如果((dtMonth==4 | | dtMonth==6 | | dtMonth==9 | | dtMonth==11)和&dtDay==31)
返回false;
否则如果(dtMonth==2)
{
var isleap=(dtYear%4==0&&(dtYear%100!=0 | | dtYear%400==0));
如果(dtDay>29 | |(dtDay==29&&!isleap))
返回false;
}
返回true;
}
我可以使用什么正则表达式模式来解释无效日期和闰年?将正则表达式重新排列为:
/^(\d{4})([\/-])(\d{1,2})\2(\d{1,2})$/
我做的不仅仅是重新排列术语,我还做了一些调整,这样它就不会接受像yyy-mm/dd
这样的“坏”日期
之后,您需要调整dtMonth
等变量,如下所示:
dtYear = dtArray[1];
dtMonth = dtArray[3];
dtDay = dtArray[4];
在此之后,代码应该可以正常工作。尝试以下操作:
由于jQuery被标记,因此这里有一种简单/用户友好的方法来验证必须是日期的字段(您将需要): html
更新:经过一番挖掘,我没有发现任何证据表明有现成的参数可以设置特定的日期格式 但是,您可以在自定义规则中插入您选择的正则表达式:) 此新规则将意味着对标记进行更新:
<input id="date_creation" name="date_creation" type="text" class="myDateFormat" />
在这里操作演示小提琴
将验证函数更改为此
function isDate(txtDate)
{
return txtDate.match(/^d\d?\/\d\d?\/\d\d\d\d$/);
}
如果这对您来说足够的话,您也可以使用正则表达式来完成稍微简单的工作(例如,如[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
- [1]
- [2]
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;}
您可以仅使用正则表达式进行验证
// 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)
当然,日期格式应该是您所在地区的格式。您可以使用此格式。它用于YYYY-MM-DD。它会检查日期是否有效,并且值是否为空。如果所有检查结果都正确,则返回
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代码>否则将无法正确创建新日期()
实例 我只是稍微扩展了上面发布的isValidDate函数Thorbin(使用正则表达式)。我们使用一个正则表达式来检查格式(防止我们得到另一个对日期有效的格式)。在这个松散检查之后,我们实际上通过日期构造函数运行它,如果它在这个格式内有效,则返回true或false。如果它不是一个有效的日期,我们将从这个函数得到false
函数isValidDate(日期字符串){
var regEx=/^\d{4}-\d{2}-\d{2}$/;
如果(!dateString.match(regEx))返回false;//格式无效
var d=新日期(日期字符串);
var dNum=d.getTime();
如果(!dNum&&dNum!==0)返回false;//n值,则日期无效
返回d.toISOString().slice(0,10)==dateString;
}
/*示例使用*/
console.log(isValidDate(“0000-00-00”);//假的
控制台日志(isValidDate(“2015-01-40”);//假的
console.log(isValidDate(“2016-11-25”);//真的
console.log(isValidDate(“1970-01-01”);//真=纪元
控制台日志(isValidDate(“2016-02-29”);//真=闰日
console.log(isValidDate(“2013-02-29”);//false=非闰日
只需使用日期
构造函数与字符串输入进行比较:
函数isDate(str){
返回'string'==typeof str&&(dt=newdate(str))&&!isNaN(dt)&&str==dt.toISOString().substr(0,10);
}
控制台日志(isDate(“2018-08-09”);
控制台日志(isDate(“2008-23-03”);
控制台日志(isDate(“0000-00-00”);
控制台日志(isDate(“2002-02-29”);
控制台日志(isDate(“2004-02-29”)代码>这是YYYY-MM-DD格式的JavaScript rejex
/([12]\d{3}-(0[1-9]| 1[0-2])-(0[1-9]|[12]\d|3[01])/
您的自定义正则表达式版本将不会检查有效的数字范围,并且还会匹配“0000-00-00”之类的内容。您还可以使用更简单、纯javascript来完成这一点,出于教育方面的原因,这应该是IMO的首选。第一条规则检查有效的数字范围(tested 2000-44-23,return invalid)。我会更新我的答案,以便更清楚。当然,您可以使用纯javascript来实现这一点,但我认为OP了解一种使用jQuery功能的方法会很有趣。我认为使用jQuery很好,我只是想让您知道第二种解决方案可能存在一些问题。您错过了一个调用函数valiDATE
的巨大机会。只是说,人…这真的很好,但为什么是位或需要?它是用来合并一个有效的日期到一个真实的值<代码>无效日期
导致0
错误(包括无效日期
在内的日期都是错误的)。如果不这样做,您将得到如下结果:!!(新日期('2016-11-25')//true
,!!(新日期('2016-11-50')//正确
isValidDate("23-03-2012") // false
isValidDate("1987-12-24") // true
isValidDate("22-03-1981") // false
isValidDate("0000-00-00") // true
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 }
}
}) ;
// 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;}
// 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)
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;
}
moment(dateString, 'YYYY-MM-DD', true).isValid() ||
moment(dateString, 'YYYY-M-DD', true).isValid() ||
moment(dateString, 'YYYY-MM-D', true).isValid();