0

我想在我的模型中验证"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 一起输出正确的格式。(我想同时使用“.”和“-”分隔符,因为我在另一个范围内收集日期,应该允许两个版本。)

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

我究竟做错了什么?

4

1 回答 1

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

因为nil如果 Rails 无法解析它,可能会在需要时添加一些自定义验证器

于 2012-09-18T10:32:53.937 回答