2012-07-31 105 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