0

我正在开发一个使用特殊日期格式的 Ruby on Rails 应用程序。有问题的日期格式是 Year.month.day,日期可以是:

年.月.日 年.月 年

我正在研究一种必须检查格式的验证方法,如果输入日期符合任何这些格式,则使其有效。到目前为止,我的代码是:

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 }

希望对和我有同样情况的人有所帮助。谢谢你的回答。我很感激反馈。

4

1 回答 1

0

您不匹配 variable data,而是匹配symbol :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
于 2012-07-31T10:17:13.280 回答