使用正则表达式,我将如何验证日期以确保仅以此格式输入:mm/dd/yyyy?使用正则表达式验证日期格式
如果有人有兴趣,我在Ruby模型中使用validates_format_of :date_field, :with => //
。
使用正则表达式,我将如何验证日期以确保仅以此格式输入:mm/dd/yyyy?使用正则表达式验证日期格式
如果有人有兴趣,我在Ruby模型中使用validates_format_of :date_field, :with => //
。
@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特定版本。
这只会让你在途中 - 02/31/1234会通过和许多其他无效的日期 - 对于真正的日期验证,考虑到闰年,你需要一个巨大的正则表达式(这是[可能的,但不是一个好主意](http://stackoverflow.com/questions/4290433/)正则表达式换aspregularexpressionvalidator与 - 格式MMDDYY跨越式Y/4291747#4291747))。最好将验证留给专门的功能。 –
@TimPietzcker我不会这样做与正则表达式。我确信有这些模块或其他更好的方法。 – FailedDev
您可能需要转义'/'字符。 –
正则表达式这种格式可以是这样的:
^\d{2}\/\d{2}\/\d{4}$
我想你在正则表达式中犯了一个错误。你需要删除多余的'\\'。我试图解决这个错误,但是这些更改被重置为原来的状态。 –
主要的错误是与行结尾相关:http://homakov.blogspot.ru/2012/05/saferweb-injects-in-various-ruby.html –
正则表达式真的不适合这项工作['DateTime.strptime'](http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html# method-c-strptime)与适当的格式字符串和异常处理程序会好得多。 –
我需要做的是验证一个字符串,应格式化为:(2个数字)/(2个数字)/(4个数字)。 –
但“20/20/2020”不是有效日期。 –