Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.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验证日期字符串格式的最佳方法_Javascript_Jquery_Jquery Validate - Fatal编程技术网

Javascript 通过jQuery验证日期字符串格式的最佳方法

Javascript 通过jQuery验证日期字符串格式的最佳方法,javascript,jquery,jquery-validate,Javascript,Jquery,Jquery Validate,我找到了很多链接来验证字符串是否为日期 喜欢和 但无论如何,我不知道如何验证我们是否有这样的东西: 2012年6月6日其中第一个6是月,第二个6是天 如果用户这样输入: 2012年6月6日 有什么线索可以用正确的方式来做吗 谢谢 在这里,这应该适用于任何带有4位年份和任何分隔符的日期格式。我从我的插件中提取了它,该插件可以验证日期等等 var isValidDate = function (value, userFormat) { var userFormat = userFormat

我找到了很多链接来验证字符串是否为日期

喜欢和

但无论如何,我不知道如何验证我们是否有这样的东西:

2012年6月6日其中第一个6是月,第二个6是天

如果用户这样输入:

2012年6月6日

有什么线索可以用正确的方式来做吗


谢谢

在这里,这应该适用于任何带有4位年份和任何分隔符的日期格式。我从我的插件中提取了它,该插件可以验证日期等等

var isValidDate = function (value, userFormat) {
  var

  userFormat = userFormat || 'mm/dd/yyyy', // default format

  delimiter = /[^mdy]/.exec(userFormat)[0],
  theFormat = userFormat.split(delimiter),
  theDate = value.split(delimiter),

  isDate = function (date, format) {
    var m, d, y
    for (var i = 0, len = format.length; i < len; i++) {
      if (/m/.test(format[i])) m = date[i]
      if (/d/.test(format[i])) d = date[i]
      if (/y/.test(format[i])) y = date[i]
    }
    return (
      m > 0 && m < 13 &&
      y && y.length === 4 &&
      d > 0 && d <= (new Date(y, m, 0)).getDate()
    )
  }

  return isDate(theDate, theFormat)

}
var isValidDate=函数(值,用户格式){
变量
userFormat=userFormat | |‘mm/dd/yyyy’,//默认格式
分隔符=/[^mdy]/.exec(userFormat)[0],
格式=userFormat.split(分隔符),
日期=值。拆分(分隔符),
isDate=函数(日期、格式){
变量m,d,y
for(变量i=0,len=format.length;i0&&m<13&&
y&&y.length==4&&

d>0&&d使用正则表达式

var dateRegEx = /^(0[1-9]|1[012]|[1-9])[- /.](0[1-9]|[12][0-9]|3[01]|[1-9])[- /.](19|20)\d\d$/

console.log("06/06/2012".match(dateRegEx) !== null) // true
console.log("6/6/2012".match(dateRegEx) !== null) // true
console.log("6/30/2012".match(dateRegEx) !== null) // true
console.log("30/06/2012".match(dateRegEx) !== null) // false

编辑-免责声明 正如@elclanrs所指出的,这只验证字符串的格式,而不是实际日期,这意味着2月31日这样的日期会过去。然而,由于OP只要求“验证日期字符串格式”,我将把这个答案保留在这里,因为对于某些人来说,这可能就是你所需要的

需要注意的是,OP使用的方法也只验证格式


最后,对于那些想知道,如果您需要验证日期,而不仅仅是格式,则此正则表达式在(1-12)/(1-31)/(1900-2099)日期字符串的域中会有~2%的失败率。请不要在JPL的关键任务代码中使用此选项。

这不会对所有情况都适用,例如
console.log(“11/31/2012”。match(dateRegEx))//true
@elclars嗯……这不是一个有效的(M)M/(D)D/YYYY日期字符串吗?你是说它应该返回false吗?好吧,11月没有31天……所以是的,我想它应该返回false。@elclars-啊哈!很好的捕获…有时很容易超越自己。