我正在开发一个Ruby on Rails应用程序,它使用一种特殊的日期格式。 有问题的日期格式是Year.month.day,日期可以是:
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
端
每当我在表单中添加日期时,else情况会随着错误而上升。我很确定我的代码是正确的。我错过了什么吗?
修改:
找到解决方案。像这样工作:
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 :(得分: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