2012-09-18 42 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