Ruby on rails 使用Rails验证美国邮政编码格式

Ruby on rails 使用Rails验证美国邮政编码格式,ruby-on-rails,ruby-on-rails-3,validation,zipcode,Ruby On Rails,Ruby On Rails 3,Validation,Zipcode,如何使用Rails验证美国邮政编码 我写了这样的东西,但不起作用: validates_format_of :zip_code, :with => /^\d{5}(-\d{4})?$/, :message => "Zip code should be valid" 
 美国的邮政编码是5位数或5位数加4位数的区号。请尝试以下操作: validates_format_of :zip_code, :with => %r{\d{5}(

如何使用Rails验证美国邮政编码

我写了这样的东西,但不起作用:

validates_format_of :zip_code,
  :with => /^\d{5}(-\d{4})?$/,
  :message => "Zip code should be valid"

美国的邮政编码是5位数或5位数加4位数的区号。请尝试以下操作:

validates_format_of :zip_code,
                    :with => %r{\d{5}(-\d{4})?},
                    :message => "should be 12345 or 12345-1234"

您还可以使用:

尝试一个你知道的有效的zip,例如02135和一个无效的zip,比如09990,看看有什么不同

我想把这个和

结合起来。
validates_format_of :zip, :with => /^\d{5}(-\d{4})?$/, :message => "should be in the form 12345 or 12345-1234"
它是用
validate\U format\U of
,而不是
validate\U format\U of
,因为这意味着它也可以用于电话号码等,这些号码也适合固定的、已知的格式(.例如美国)。
可能先验证格式,如果无效,则给出错误,所以使用标准flash消息在rails中处理所有内容。
然后,如果有效,则调用该服务器以验证实际的zip本身

像这样伟大的服务器提供的验证的唯一缺点是,它们增加了对其他站点和服务的依赖性。因此,如果其他站点/服务发生变化或不可用等,则存在问题。这就是为什么首先进行更简单的有效性检查是一个好主意的另一个原因


一个完整的服务解决方案还将检查邮政编码服务是否超时,如果发生这种情况,比如说5秒,格式可能是接受值的最佳方式。如果可能的话,可能会设置一个“未验证的”标志

这两个答案都很好

另一个想法是创建您自己的自定义验证,它不仅检查位数是否正确,还检查后台数据库中是否存在邮政编码

e、 g.这些宝石有助于:

geokit,检查这里:

邮政编码信息

这对我很有用:(ruby-2.0.0-p247,rails 4.0.0)


希望它有用。

如果您需要多国支持,您可以使用gemi发布的。它目前支持159个国家/地区的zipcode格式,并与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
类地址
谢谢,但当我输入123456时,它验证了这是正常的-我还有一次机会-请检查我的。我已删除对此的引用,并添加了我自己的regexp供您尝试-
:with=>/^\d{5}(\d{4})$/
请定义“它不起作用”。如果使用regexp,
^
$
匹配行(换行符之间的文本),而不是整个字符串。使用
\A
代替
^
\z
代替
$
将确保整个字符串有效。以下是@aron在其评论webservicex.net链接中给出的较长解释的链接已关闭
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