Rails验证三种类型的日期格式

时间:2012-07-31 09:03:42

标签: ruby-on-rails ruby-on-rails-3 validation customvalidator

我正在开发一个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 }

希望能帮助处于与我相同情况的任何人。谢谢你的答案。我很感激反馈。

1 个答案:

答案 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