2011-11-17 80 views
2

使用正则表达式,我将如何验证日期以确保仅以此格式输入:mm/dd/yyyy?使用正则表达式验证日期格式

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

+1

正则表达式真的不适合这项工作['DateTime.strptime'](http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html# method-c-strptime)与适当的格式字符串和异常处理程序会好得多。 –

+0

我需要做的是验证一个字符串,应格式化为:(2个数字)/(2个数字)/(4个数字)。 –

+1

但“20/20/2020”不是有效日期。 –

回答

2

@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会通过和许多其他无效的日期 - 对于真正的日期验证,考虑到闰年,你需要一个巨大的正则表达式(这是[可能的,但不是一个好主意](http://stackoverflow.com/questions/4290433/)正则表达式换aspregularexpressionvalidator与 - 格式MMDDYY跨越式Y/4291747#4291747))。最好将验证留给专门的功能。 –

+0

@TimPietzcker我不会这样做与正则表达式。我确信有这些模块或其他更好的方法。 – FailedDev

+0

您可能需要转义'/'字符。 –

5

正则表达式这种格式可以是这样的:

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

我想你在正则表达式中犯了一个错误。你需要删除多余的'\\'。我试图解决这个错误,但是这些更改被重置为原来的状态。 –

+0

主要的错误是与行结尾相关:http://homakov.blogspot.ru/2012/05/saferweb-injects-in-various-ruby.html –