date regex,验证3种不同的格式

时间:2013-06-26 09:13:17

标签: regex

我需要一个用于验证日期字符串的正则表达式

YYYY:MM:DD:HH   
YYYY:MM:DD:HH:mm    
YYYY:MM:DD:HH:mm:ss 

表示所有3种格式都有效。 有人可以帮我这个吗?

我有

  • d\d\d\d:(0\d|1[012]):([012]\d|3[01]):([01]\d|2[0-3])$ YYYY:MM:DD:HH
  • ^\d\d\d\d:(0\d|1[012]):([012]\d|3[01]):([01]\d|2[0-3]):[0-5]\d$ YYYY:MM:DD:HH:MM
  • ^\d\d\d\d:(0\d|1[012]):([012]\d|3[01]):([01]\d|2[0-3]):[0-5]\d:[0-5]\d$ YYYY:MM:DD:HH:MM:SS

这3个正则表达式需要合并为一个

3 个答案:

答案 0 :(得分:1)

这是你的模式

YYYY:MM:DD:HH(:mm(:ss)?)?

?表示0或1次

你可以测试它here

答案 1 :(得分:1)

我保留了您的年月日表达d\d\d\d:(0\d|1[012]):([012]\d|3[01]):([01]\d|2[0-3])。由于您的小时和分钟表达式相同:[0-5]\d我只需要它们显示为零,一次或两次。

结果表达式为:

^\d\d\d\d:(0\d|1[012]):([012]\d|3[01]):([01]\d|2[0-3])(:[0-5]\d){0,2}$

enter image description here

francis-gagnon的此表达式稍作修改,以防止将日期或月份表示为00的边缘情况。

^\d\d\d\d:(0[1-9]|1[012]):(0[1-9]|[12]\d|3[01]):([01]\d|2[0-3])(:[0-5]\d){0,2}$

enter image description here

如果您还想检查日期是否有效,那么您可以使用类似这个怪物的东西来测试每个日期位置是否有效且时间适合24小时制:

^(?:(?:(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))(:|\/|-|\.)(?:0?2\1(?:29)))|(?:(?:(?:1[6-9]|[2-9]\d)?\d{2})(:|\/|-|\.)(?:(?:(?:0?[13578]|1[02])\2(?:31))|(?:(?:0?[13-9]|1[0-2])\2(?:29|30))|(?:(?:0?[1-9])|(?:1[0-2]))\2(?:0?[1-9]|1\d|2[0-8]))))(?::(?:[01]\d|2[0-3]))?(?::[0-5]\d){0,2}$

enter image description here

答案 2 :(得分:0)

\d{4}:[0-1][0-9]:[0-3][0-9](?::[0-5][0-9](?::[0-5][0-9])?)?