2013-10-14 35 views
1

我正在使用Rails 4应用程序,并且需要对加拿大邮政编码进行验证,例如“B1C 2B3”作为用户地址的一部分。在Rails中验证加拿大邮政编码的好方法是什么?

我已经找到了这颗宝石https://github.com/globaldev/going_postal,但我认为这只是为了验证而已。

是否有另一种方法来编写验证邮政编码?

+0

你能描述一个有效的加拿大邮政编码的模式(可能是正则表达式)吗?任何边缘情况? – lulalala

回答

3

我发现on 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 } 
+0

这不起作用。我用rails 4.2测试过。另外:http://rubular.com/r/m6pe3FUi0s –

0

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

4

我明白你问一个oneliner而不是添加一个宝石,但ju st以防其他人考虑该选项,您可以使用validates_zipcode宝石我写了。它目前支持259个国家邮政编码格式,其中大部分来自CLDR database拍摄和播放使用Rails好的3 & 4.它有支持加拿大:)

您可以使用它像这样:

class Address < ActiveRecord::Base 
    validates_zipcode :zipcode 
    # or 
    validates :zipcode, zipcode: { country_code_attribute: :postal_code } 
end 
相关问题