在javascript中验证mm/dd/yyyy格式的短日期和长日期的正则表达式
我想验证日期,它可以是短日期格式或长日期格式。 对于一些有效日期 2010年5月12日,2010年5月12日,2010年5月12日,2010年5月12日在javascript中验证mm/dd/yyyy格式的短日期和长日期的正则表达式,javascript,regex,datetime,Javascript,Regex,Datetime,我想验证日期,它可以是短日期格式或长日期格式。 对于一些有效日期 2010年5月12日,2010年5月12日,2010年5月12日,2010年5月12日 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) { r
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时,当前正则表达式失败,这是因为
12/05/20
是输入的子字符串12/05/20-0
是有效日期
要避免子字符串匹配,可以将锚定用作:
/^\d{1,2}[\/-]\d{1,2}[\/-]\d{4}$/
但同样,上面允许的日期,如00/00/0000
和29/02/非闰年
无效
因此,最好使用库函数进行验证
我能够找到一个这样的库:发生这种情况是因为
12/05/20
是您输入的子字符串12/05/20-0
是一个有效日期
要避免子字符串匹配,可以将锚定用作:
/^\d{1,2}[\/-]\d{1,2}[\/-]\d{4}$/
但同样,上面允许的日期,如00/00/0000
和29/02/非闰年
无效
因此,最好使用库函数进行验证
我找到了一个这样的库:这里有一个稍微更健壮的正则表达式,它将尝试过滤掉一些不好的日期:
^(1[012]|0[1-9])([\/\-])(0[1-9]|[12]\d|3[01])\2((?:19|20)?\d{2})$
输入(如上所示)
日匹配:01-31,月匹配:01-12,年匹配1900-2099。它还将强制您输入一致的分隔符(即:mm/dd/yyyyy
和mm-dd-yyyy
有效,但mm-dd/yyyyy
无效)
这仍然需要一些糟糕的日期(如2000年2月30日),但从实际角度来看,这应该足够好了。这也会将月、日和年分别放在捕获组1、2和3中。这里有一个稍微健壮的正则表达式,它将尝试过滤掉一些不好的日期:
^(1[012]|0[1-9])([\/\-])(0[1-9]|[12]\d|3[01])\2((?:19|20)?\d{2})$
输入(如上所示)
日匹配:01-31,月匹配:01-12,年匹配1900-2099。它还将强制您输入一致的分隔符(即:mm/dd/yyyyy
和mm-dd-yyyy
有效,但mm-dd/yyyyy
无效)
这仍然需要一些糟糕的日期(如2000年2月30日),但从实际角度来看,这应该足够好了。这也将把月、日和年分别放在捕获组1、2和3中。codedict是正确的。顺便说一句,您可能能够将2个正则表达式组合成一个:^\d{1,2}[\/-]\d{1,2}[\/-](\d{2}}\d{4})$。。。mm的第一个数字也可以进一步优化,这取决于你想做什么。顺便说一句,您可能能够将2个正则表达式组合成一个:^\d{1,2}[\/-]\d{1,2}[\/-](\d{2}}\d{4})$。。。mm的第一个数字也可以进一步优化-取决于你想做什么。这会验证短日期和长日期吗?这会验证短日期和长日期吗?