JavaScript - 用于验证 mm/dd/yyyy 格式日期的正则表达式

3

我不擅长正则表达式,但我有一段代码可以验证 dd/mm/yyyy 格式的日期,并且它也可以验证闰年。我尝试修改它以使其适用于 mm/dd/yyyy,但是所有尝试都失败了。

是否有人能将其更改为验证 mm/dd/yyyy 格式?

正则表达式:

^(((0[1-9]|[12]\d|3[01])/(0[13578]|1[02])/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)/(0[13456789]|1[012])/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])/02/((19|[2-9]\d)\d{2}))|(29/02/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$

答案: 大家好,感谢你们提供的帮助,在重新解析正则表达式后,我找到了验证 mm/dd/yyyy格式的答案。

新的正则表达式:

/^(((0[13578]|1[02])/(0[1-9]|[12]\d|3[01])/((19|[2-9]\d)\d{2}))|((0[13456789]|1[012])/(0[1-9]|[12]\d|30)/((19|[2-9]\d)\d{2}))|(02/(0[1-9]|1\d|2[0-8])/((19|[2-9]\d)\d{2}))|(02/29/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g


2
最好尝试从输入字符串构造Date对象,如果它是有效的(非空),则日期是有效的。因为像闰年和每个月的天数这样的问题将很容易解决。 - Vasilen Donchev
3
在这里使用正则表达式是个不好的主意。即使在最好的情况下,人们也常常无法正确计算闰年 - 尝试在正则表达式中完成这个任务会很糟糕。 - Jon Skeet
看看这个答案,给你一些替代的想法:http://stackoverflow.com/a/16464768/592253 - Xotic750
你不应该询问是否有人可以为你更改代码!http://momentjs.com/ - iConnor
1
自己解析字符串并提供组件部分,参见String.splitDate - Xotic750
显示剩余4条评论
1个回答

5

尝试使用

function validateDate(testdate) {
    var date_regex = /^(0[1-9]|1[0-2])\/(0[1-9]|1\d|2\d|3[01])\/(19|20)\d{2}$/ ;
    return date_regex.test(testdate);
}

但是最好使用正则表达式,使用 Date对象 来从日期字符串中提取日期并进行验证。


谢谢你的回答,但我还需要验证闰年日期。 - Sathish
它没有这样做吗?你检查过了吗? - GautamD31
闰年的格式不会有所不同,对吧? - iConnor
我认为@Connor可能需要稍微改一下。 - GautamD31
在 jsfiddle 上:http://jsfiddle.net/LSsMc/ - Sathish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接