2012-09-18 39 views
0

我想在我的模型中验证欧洲日期格式,如"10.02.2012""10-02-2012"Rails正则表达式:validates_format_for带两个不同分隔符的日期格式

所以我用这行:

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' %> 

与日期选择器UI,输出正确的格式。 (“”我想用这两个和‘ - ’分隔符,因为我收集另一范围,其中两个版本应该被允许的日期)

的PARAMS看起来是正确的,以及有它说:"...matchdate"=>"29.09.2012"

我做错了什么?

+0

您是否使用/^\d{2} (\.|-)\d{2}(\.|-)\d{4}$/i? – rodzyn

+0

是的,谢谢,但它不工作。 – flyte321

+0

这是值得一试的: /\A[::digit:]]{2}(\.|-)[[:digit:]]{2}(\.|-)[[:digit:]] {4} \ Z /我 – Yarneo

回答

1

当你开始从params模型的新实例时,Rails蒙上你的约会变成Date对象(例如,使用我自己的模型):

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

但你不能用Regex验证Date。你真正需要的是

validates :matchdate, presence: true 

,因为这将是nil如果Rails的无法解析它,也许如果需要添加一些custom validators

+0

啊,这是线索,谢谢。在此期间,我宣布了一个简单的方法:'format format_date errors.add(:matchdate,'Date wrong')if!matchdate.is_a?(Date) end' – flyte321