2013-10-14 33 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 
相關問題