Ruby on rails Rails验证三种类型的日期格式
我正在开发一个RubyonRails应用程序,它使用一种特殊的日期格式。 所讨论的日期格式为Year.month.day,日期可以是: 年、月、日 年月 年 我正在研究一种验证方法,该方法必须检查格式,如果输入日期符合其中任何一种格式,则使其有效。到目前为止,我的代码是:Ruby on rails Rails验证三种类型的日期格式,ruby-on-rails,ruby-on-rails-3,validation,customvalidator,Ruby On Rails,Ruby On Rails 3,Validation,Customvalidator,我正在开发一个RubyonRails应用程序,它使用一种特殊的日期格式。 所讨论的日期格式为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
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 }
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
希望这能帮助和我处境相同的人。谢谢你的回答。我很感谢您的反馈。您没有匹配变量
数据
,而是匹配符号:data
,这就是它引发错误的原因(顺便说一句,如果您可以发布错误,这将非常有用)
不管怎样,我想你想要的是这样的:
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 }
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
你能在异常回溯中通过吗?找到了!我使用regexp.join将三个regexp合并为一个,然后将结果传递给validates:data,:format=>{with=>result}。成功了。我将发布解决方案。谢谢你的回复顺便说一句。我感谢你的反馈:-D