使用正则表达式验证日期格式

3

使用正则表达式,如何验证日期,以确保它只以这种格式输入:mm/dd/yyyy?

如果有人感兴趣,我在Ruby模型中使用validates_format_of :date_field, :with => //


1
一个正则表达式并不是这个任务的正确工具,使用DateTime.strptime和适当的格式字符串以及异常处理程序会更好。 - mu is too short
我需要做的是验证一个字符串,它应该按照以下格式进行格式化:(2个数字)/(2个数字)/(4个数字)。 - Artem Kalinchuk
1
但是“20/20/2020”不是一个有效的日期。 - mu is too short
你说得对。但只要以那种格式输入,我就不介意。 - Artem Kalinchuk
2个回答

5

针对这种格式的正则表达式可以如下所示:

^\d{2}\/\d{2}\/\d{4}$

我认为你在正则表达式中犯了一个错误。你需要删除多余的 \\。我试图修复这个错误,但更改被重置回原来的状态。 - Artem Kalinchuk
主要错误与行尾有关:http://homakov.blogspot.ru/2012/05/saferweb-injects-in-various-ruby.html - denis.peplin

3

@hsz的回答是正确的。如果您还需要验证日期本身,可以使用以下内容:

/^(?:0?[1-9]|1[0-2])/(?:0?[1-9]|[1-2]\d|3[01])/\d{4}$/

编辑:

如@Tim所说,这并不是一个100%的正则表达式验证器。请参考他链接的答案。

if subject =~ /\A(?:0?[1-9]|1[0-2])\/(?:0?[1-9]|[1-2]\d|3[01])\/\d{4}\Z/
    # Successful match

编辑#2: 上述内容是针对Ruby的特定版本。

2
这只能让你完成一半 - 02/31/1234 可以通过,还有很多其他无效的日期 - 要进行真正的日期验证并考虑闰年,您需要一个巨大的正则表达式(这是可能的,但不是一个好主意)。最好将验证留给专门的函数。 - Tim Pietzcker
@TimPietzcker我不会用正则表达式来做这个。我相信有适合此目的的模块或更好的方法。 - FailedDev
你可能需要转义 / 字符。 - Artem Kalinchuk

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