1

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

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 个正则表达式需要合二为一

4

3 回答 3

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}$

在此处输入图像描述

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}$

在此处输入图像描述

如果您还想检查日期是否有效,那么您可以使用类似这个怪物的东西来测试每个日期位置是否有效,并且时间适合 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}$

在此处输入图像描述

于 2013-06-26T12:41:29.260 回答
1

这是你的模式

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

?表示 0 或 1 次

你可以在这里测试

于 2013-06-26T09:15:32.313 回答
0
\d{4}:[0-1][0-9]:[0-3][0-9](?::[0-5][0-9](?::[0-5][0-9])?)?
于 2013-06-26T09:31:39.707 回答