Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用jquery验证此格式(yyyy-mm-dd)的日期?_Javascript_Jquery - Fatal编程技术网

Javascript 如何使用jquery验证此格式(yyyy-mm-dd)的日期?

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

我正在尝试验证以下格式的日期:(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})$/; //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验证插件和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;}
您可以仅使用正则表达式进行验证

// 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();