1

我正在开发 Rails 4 应用程序,需要根据加拿大邮政编码(例如“B1C 2B3”)作为用户地址的一部分进行验证。

我找到了这个宝石https://github.com/globaldev/going_postal但我认为它只是为了验证而过度杀戮。

还有另一种方法可以为邮政编码编写验证吗?

4

3 回答 3

4

我了解您要求使用 oneliner 而不是添加 gem,但以防万一其他人考虑该选项,您可以使用validates_zipcode我写的 gem。它目前支持259 个国家/地区的邮政编码格式,其中大部分来自CLDR 数据库,并且与 Rails 3 和 4 配合得很好。它确实支持加拿大 :)

你可以像这样使用它:

class Address < ActiveRecord::Base
  validates_zipcode :zipcode
  # or
  validates :zipcode, zipcode: { country_code_attribute: :postal_code }
end
于 2015-07-07T17:03:31.020 回答
3

在 debuggex(一个很棒的正则表达式测试站点)上发现加拿大邮政编码正则表达式是

[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1}[ -]?\d{1}[A-Z]{1}\d{1}

要根据该模式检查字符串,请执行以下验证:

canadian_postal_code = /\A[ABCEGHJKLMNPRSTVXY]{1}\\d{1}[A-Z]{1}[ -]?\\d{1}[A-Z]{1}\\d{1}\z/
validates :postal_code, format: { with: canadian_postal_code }
于 2013-10-14T04:59:25.330 回答
0

在验证中应该是(所有单斜杠,没有双斜杠):/\A[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1}[ -]?\d{1}[A-Z]{1}\d{1}\z/

于 2015-03-30T06:14:42.550 回答