如何在Rails中验证美国邮政编码?
我写了以下代码但它并不起作用:
validates_format_of :zip_code,
:with => /^\d{5}(-\d{4})?$/,
:message => "Zip code should be valid"
如何在Rails中验证美国邮政编码?
我写了以下代码但它并不起作用:
validates_format_of :zip_code,
:with => /^\d{5}(-\d{4})?$/,
:message => "Zip code should be valid"
您还可以使用以下方式验证ZIP文件是否有效(不仅是格式,还包括ZIP本身):
尝试一个您知道的有效的ZIP文件,例如02135,与无效的ZIP文件09990进行比较。
我建议将此与以下内容结合使用:
validates_format_of :zip, :with => /^\d{5}(-\d{4})?$/, :message => "should be in the form 12345 or 12345-1234"
使用validate_format_of
而不是validate_format_of_zip_code
完成此操作,因为这意味着它也可以用于符合固定已知格式(例如美国)的电话号码等其他内容。
首先,可能应该验证格式并在无效时给出错误,以便在Rails中使用标准闪存消息处理所有内容。
然后,如果有效,再调用服务器验证实际的邮政编码本身。
像这样的伟大服务器提供的验证的唯一缺点是它们增加了对其他站点和服务的依赖性。 因此,如果其他站点/服务更改了设置或不可用,就会出现问题。 这是另一个原因,为什么首先执行更简单的有效性检查是个好主意。
完整的服务解决方案还将检查邮政编码服务的超时,并且如果发生超时(例如5秒),并且格式正确,则最好接受该值。 如果可能,可以设置一个“未验证的邮政编码”标志!
^
和 $
匹配的是行(位于换行符之间的文本),而不是整个字符串。在 ^
的位置使用 \A
,在 $
的位置使用 \z
可以确保整个字符串有效。 - Aaron Lasseigne这对我起效了:(ruby-2.0.0-p247、rails 4.0.0)
validates_format_of :zip_code,
with: /\A\d{5}-\d{4}|\A\d{5}\z/,
message: "should be 12345 or 12345-1234",
allow_blank: true
validates_zipcode
宝石。 它目前支持159个国家的邮政编码格式,并与Rails 3和4兼容。您可以像这样使用它:class Address < ActiveRecord::Base
validates_zipcode :zipcode
validates :zipcode, zipcode: true
validates :zipcode, zipcode: { country_code: :ru }
validates :zipcode, zipcode: { country_code_attribute: :my_zipcode }
end
这两个都是很好的答案!
另一个想法是创建自己的自定义验证,不仅检查数字的数量是否正确,还要在后台检查数据库中的邮政编码是否存在。
例如,这些宝石可能有所帮助:
geokit,可以在此处检查:Ruby的最佳邮政编码插件
zip-code-info,http://rubygems.org/gems/zip-code-info
美国的邮政编码是5位数字或带有4位区号的5位数字。请尝试以下操作:
validates_format_of :zip_code,
:with => %r{\d{5}(-\d{4})?},
:message => "should be 12345 or 12345-1234"
:with => /^\d{5}(-\d{4})?$/
。 - Michael Durrant