【问题标题】:Validating date format using regular expression使用正则表达式验证日期格式
【发布时间】:2011-12-31 16:38:23
【问题描述】:

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

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

【问题讨论】:

  • 正则表达式确实不是这项工作的正确工具,DateTime.strptime 带有适当的格式字符串和异常处理程序会好得多。
  • 我需要做的是验证一个应该被格式化的字符串:(2个数字)/(2个数字)/(4个数字)。
  • 但是“20/20/2020”不是有效日期。
  • 你是对的。但我不介意,只要以那种格式输入即可。

标签: ruby-on-rails ruby regex validation


【解决方案1】:

这种格式的正则表达式看起来像:

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

【讨论】:

  • 我认为你在正则表达式中犯了一个错误。您需要删除额外的`\`。我试图修复错误,但更改被重置为原来的样子。
  • 主要错误与行尾有关:homakov.blogspot.ru/2012/05/…
【解决方案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 特定版本。

【讨论】:

  • 这只会让你走到一半 - 02/31/1234 会过去,许多其他无效日期 - 对于考虑闰年的真实日期验证,你需要一个巨大的正则表达式(即possible, but not a good idea)。最好将验证留给专门的功能。
  • @TimPietzcker 我不会用正则表达式来做这个。我确信有用于此的模块或其他更好的方法。
  • 您可能需要转义 / 字符。
猜你喜欢
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
相关资源
最近更新 更多