正则表达式以此格式验证日期d / m / yyyy

时间:2011-02-05 00:02:10

标签: regex

我找到了一个可以创造奇迹的regex,但是它强制推动每月的0,我需要接受以一位数字格式表示月份和/或日期的日期

3 个答案:

答案 0 :(得分:3)

我用REGex Tester进行了测试:

^(((0?[1-9]|[12]\d|3[01])\/(0?[13578]|1[02])\/((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|[12]\d|30)\/(0?[13456789]|1[012])\/((1[6-9]|[2-9]\d)\d{2}))|((0?[1-9]|1\d|2[0-8])\/0?2\/((1[6-9]|[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))))$

这与@ ant18链接相同,但我为每个前导?添加了0

编辑: sry误读了提问者的姓名,更正了

答案 1 :(得分:1)

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

与您提供的带有可选前导0的正则表达式相同。

答案 2 :(得分:0)

这样做:

var rx = /^(3[0-1]|[0-2]?[0-9])\/(1[0-2]|0?[0-9])\/[0-9]{4}$/;

   rx.text('01/01/2000'); //true

   rx.text('1/1/2000'); //true

   rx.text('32/1/2000'); //false

   rx.text('1/13/2000'); //false

然而,这并不能确保有效日期,因为它将允许日期为31/2/2000

要解析日期,并在/上对其进行验证并使用new Date从值中创建日期对象,然后提取相同的值并查看它们是否匹配,如果不是,则日期为无效:)