2012-07-31 121 views
0

我正在開發使用特殊類型日期格式的Ruby on Rails應用程序。 有問題的日期格式是Year.month.day和日期可以是:Rails驗證三種日期格式

Year.month.day Year.month 年

我的工作是必須檢查的驗證方法格式,如果輸入日期適合任何這些格式,請使其有效。到目前爲止,我的代碼是:

def data_format_correct 
regexymd = /[0-9]{4}[.][0-9]{1,2}[.][0-9]{1,2}/ 
regexym = /[0-9]{4}[.][0-9]{1,2}/ 
regexy = /[0-9]{4}/ 
if :data.to_s =~ regexymd 
    return true 
elsif :data.to_s =~ regexym 
    return true 
elsif :data.to_s =~ regexy 
    return true 
else 
    errors.add(:data) 
    return 
end 

每次我把日期的形式,在其他情況下上升,出現錯誤。我很確定我的代碼是正確的。我錯過了什麼嗎?

編輯:

找到了解決辦法。這樣的工作:

regexymd = /^[0-9]{4}[.][0-9]{1,2}[.][0-9]{1,2}$/ 
regexym = /^[0-9]{4}[.][0-9]{1,2}$/ 
regexy = /^[0-9]{4}$/ 
regex_final = Regexp.union(regexymd, regexym) 
regex_final = Regexp.union(regex_final, regexy) 

validates :data, :format => { :with => regex_final } 

希望能幫助任何人在與我的相同的情況。謝謝你的答案。我很欣賞這些反饋。

+0

你能過去的例外回溯? – 2012-07-31 09:48:10

回答

0

你不匹配的變量data,你匹配符號:data,這就是爲什麼它會引發錯誤(這將是有用的,如果你能發佈的錯誤,順便說一句)。

無論如何,我想你想要的是這樣的:

def data_format_correct 
    regexymd = /[0-9]{4}[.][0-9]{1,2}[.][0-9]{1,2}/ 
    regexym = /[0-9]{4}[.][0-9]{1,2}/ 
    regexy = /[0-9]{4}/ 
    if regexymd.match(data.to_s) 
    return true 
    elsif regexym.match(data.to_s) 
    return true 
    elsif regexy.match(data.to_s) 
    return true 
    else 
    errors.add(:data) 
    return 
    end 
end 
+0

想通了!我使用Regexp.join加入了三個正則表達式,然後通過結果驗證:data,:format => {with => result}。訣竅了。我會發布解決方案。感謝您的答覆btw。我讚賞反饋意見:-D – Wiggin 2012-07-31 10:26:53