Rails正则表达式:validates_format_for具有两个不同分隔符的日期格式

时间:2012-09-18 09:00:31

标签: ruby-on-rails regex

我想在我的模型中验证欧洲日期格式,例如"10.02.2012""10-02-2012"

因此我正在使用这一行:

validates_format_of :matchdate, :with => /\A\d{2}(\.|-)\d{2}(\.|-)\d{4}\Z/i, :message => "Date incorrect"

正则表达式必须正确,但无论我输入什么,它总是返回"Date incorrect"

我从我使用

的表单中获取输入
<%= f.text_field :matchdate, :size => '10' %>

与Datepicker UI一起输出正确的格式。 (我想同时使用“。”和“ - ”分隔符,因为我在另一个范围内收集日期,其中两个版本都应该被允许。)

params也看起来正确,它说:"...matchdate"=>"29.09.2012"

我做错了什么?

1 个答案:

答案 0 :(得分:1)

当您从params启动模型的新实例时,Rails会将您的日期转换为Date对象(使用我自己的模型的示例):

i = Invoice.new due_date: "29.09.2012"
i.due_date                              #=> Sat, 29 Sep 2012 
i.due_date.class                        #=> Date 

但您无法使用Date验证Regex。你真正需要的是

validates :matchdate, presence: true

因为如果Rails无法解析它,它将是nil,如果需要,可能会添加一些custom validators