2010-09-30 93 views
1

我想要验证它可以是在短日期格式或长日期格式日期为mm/dd/yyyy格式短和长日期。 例如:用于某些有效日期。正则表达式来验证以JavaScript

12/05/2010,12/05/10,10年12月5日,2010年12月5日

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

codeddict的权利。顺便说一句,你可能能够在2正则表达式结合togeter成一个:^ \ d {1,2} [\/- ] \ d {1,2} [\/- ](\ d {2} | \ d {4 })$ ...并且mm的第一个数字可以进一步优化 - 取决于你想要做什么。 – DashK 2010-09-30 02:46:39

回答

6

发生这种情况是因为12/05/20这是您输入的子字符串12/05/20-0是有效的日期。

为了避免串匹配,你可以使用锚为:

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

但同样上述允许的日期,如00/00/000029/02/NON_LEAP_YEAR这是无效的。

所以它能够更好地使用库函数来完成此验证。

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

+0

感谢codaddict,是否有任何描述验证的链接??? – nimi 2010-09-30 02:52:03

+0

@Nimesh:我已经用一个这样的lib更新了我的帖子。 – codaddict 2010-09-30 02:56:26

4

这里有一个稍微更强大的正则表达式将试图过滤掉一些不好的日期:

^(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没有)。

这仍然会采取一些不好的日期(如2000年2月30日),但为了实用的目的应该是足够了。这也将分别在捕获组1,2和3中放置月,日和年。

+0

这会验证短期和长期日期吗? – nimi 2010-09-30 02:50:34

+0

@Nimesh是的,它会的 – NullUserException 2010-09-30 02:51:52

+0

我相信这将验证'01/01-2001' ... – 2010-09-30 02:55:29