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

Mic*_*ruk 11 validation zipcode ruby-on-rails ruby-on-rails-3

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

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

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

Mic*_*ant 20

您还可以使用以下命令验证它实际上是一个有效的zip(不仅仅是格式而是zip本身):http:
//www.webservicex.net/uszip.asmx?op = GetInfoByZIP

尝试一个你知道的有效邮政编码,例如02135与09990之类的无效邮政编码,以查看差异.

我会考虑将其与:

validates_format_of :zip, :with => /^\d{5}(-\d{4})?$/, :message => "should be in the form 12345 or 12345-1234"
Run Code Online (Sandbox Code Playgroud)

它完成了validate_format_of,而不是validate_format_of_zip_code那意味着它也可以用于电话号码等,也适合固定的,已知的格式(例如美国).
也许首先验证格式并在无效时给出错误,因此使用标准flash消息在rails中处理它.
然后,如果有效,则调用该服务器以验证实际的zip本身.

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

完整的服务解决方案还会通过邮政编码服务检查超时情况,如果发生这种情况,请说5秒,格式正常可能最好接受价值.如果可能的话,也许设置一个'unverified_zip'标志!

  • 如果使用正则表达式,`^`和`$`匹配行(换行符之间的文本)而不是整个字符串.使用`\ A`代替`^`和`\ z`代替`$`将确保整个字符串有效. (2认同)

小智 11

这对我有用:(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
Run Code Online (Sandbox Code Playgroud)

希望它有用.


hal*_*dan 0

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

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