在Rails中验证加拿大邮政编码的好方法是什么?

xjreopfe  于 2022-10-15  发布在  Ruby
关注(0)|答案(3)|浏览(146)

我在rails 4应用程序上工作,需要验证是否符合加拿大邮政编码,如“B1C2B3”作为用户地址的一部分。
我已经找到了这块宝石,但我认为这是过度杀戮,只是为了验证一下。
有没有其他方法来编写邮政编码的验证?

kq4fsx7k

kq4fsx7k1#

我知道你要求的是一个线条,而不是添加一个宝石,但以防其他人考虑这个选项,你可以使用我写的**validates_zipcodegem。它目前支持259个国家**的邮政编码格式,其中大部分来自CLDR database,与rails 3和4配合得很好。它确实支持加拿大:)
您可以这样使用它:

class Address < ActiveRecord::Base
  validates_zipcode :zipcode
  # or
  validates :zipcode, zipcode: { country_code_attribute: :postal_code }
end
wwodge7n

wwodge7n2#

我发现on debuggex(一个很棒的regex测试站点)加拿大的邮政编码regex是

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

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

CANADIAN_POSTAL_CODE_FORMAT = /\A[ABCEGHJKLMNPRSTVXY]{1}\d{1}[A-Z]{1}[ -]?\d{1}[A-Z]{1}\d{1}\z/
validates :postal_code, format: { with: CANADIAN_POSTAL_CODE_FORMAT }
hgc7kmma

hgc7kmma3#

在验证中应为(全是单斜杠,不是双斜杠):/A[ABCEGHJKLMNPRSTVXY]{1}d{1}[A-Z]{1}[ -]?d{1}[A-Z]{1}d{1}z/

相关问题