正则表达式以javascript中的mm / dd / yyyy格式验证短日期和长日期

时间:2010-09-30 02:38:03

标签: javascript regex datetime

我想验证日期,可以是短日期格式或长日期格式。 例如:对于某些有效日期。

12/05 / 2010,12 / 10 / 10,12-25-10,12-05-2010

var reLong = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{4}\b/;
var reShort = /\b\d{1,2}[\/-]\d{1,2}[\/-]\d{2}\b/;
var valid = (reLong.test(entry)) || (reShort.test(entry));
if(valid)
{
return true;
}
else
{
return false;
}

但是当我尝试将无效日期设为12/05 / 20-0

时,此当前正则表达式失败

2 个答案:

答案 0 :(得分:6)

这是因为作为输入12/05/20的子字符串的12/05/20-0是有效日期。

为避免子字符串匹配,您可以将锚点用作:

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

但上述情况再次允许00/00/000029/02/NON_LEAP_YEAR等日期无效。

因此,最好使用库函数进行此验证。

我能够找到一个这样的库:datajs

答案 1 :(得分:5)

这是一个稍微强大的正则表达式,它会尝试过滤掉一些糟糕的日期:

^(1[012]|0[1-9])([\/\-])(0[1-9]|[12]\d|3[01])\2((?:19|20)?\d{2})$

输入(见rubular

01/01/2001  # valid
10-10-10    # valid
09/09/1998  # valid
00-00-0000  # invalid
15-15-2000  # invalid

日比赛:01至31,月比赛:01-12,年比赛1900-2099。它还会强制您输入一致的分隔符(即mm/dd/yyyymm-dd-yyyy,但mm-dd/yyyy不起作用。

这仍然需要一些糟糕的日期(例如02/30/2000),但出于实际目的,它应该足够好了。这也将分别在捕获组1,2和3中放入月,日和年。