我想验证日期,可以是短日期格式或长日期格式。 例如:对于某些有效日期。
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
时,此当前正则表达式失败答案 0 :(得分:6)
这是因为作为输入12/05/20
的子字符串的12/05/20-0
是有效日期。
为避免子字符串匹配,您可以将锚点用作:
/^\d{1,2}[\/-]\d{1,2}[\/-]\d{4}$/
但上述情况再次允许00/00/0000
和29/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/yyyy
和mm-dd-yyyy
,但mm-dd/yyyy
不起作用。
这仍然需要一些糟糕的日期(例如02/30/2000),但出于实际目的,它应该足够好了。这也将分别在捕获组1,2和3中放入月,日和年。