我想在我的模型中验证欧洲日期格式,例如"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"
我做错了什么?
答案 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。