我正在开发 Rails 4 应用程序,需要根据加拿大邮政编码(例如“B1C 2B3”)作为用户地址的一部分进行验证。
我找到了这个宝石https://github.com/globaldev/going_postal但我认为它只是为了验证而过度杀戮。
还有另一种方法可以为邮政编码编写验证吗?
我正在开发 Rails 4 应用程序,需要根据加拿大邮政编码(例如“B1C 2B3”)作为用户地址的一部分进行验证。
我找到了这个宝石https://github.com/globaldev/going_postal但我认为它只是为了验证而过度杀戮。
还有另一种方法可以为邮政编码编写验证吗?
我了解您要求使用 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
我在 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 }
在验证中应该是(所有单斜杠,没有双斜杠):/\A[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1}[ -]?\d{1}[A-Z]{1}\d{1}\z/