2015-06-19 75 views
2

我正在研究一個用戶應該輸入電話號碼的小項目,所以我想使用「ClientSideValidations」gem來驗證該信息。驗證Rails 4中的電話號碼格式 - REGEX

validates_format_of :telcasa, :celular, :tel_flia, :tel_trab, :tel_ref_2, :tel_ref_1, 
    length: { in: 10 }, 
    :with => /\A(\d{10}|\(?\d{3}\)?[-. ]\d{3}[-.]\d{4})\z/, 
    :message => "Formato invalido" 

但是,對於這個項目將被用於我要驗證手機的三個第一號對應區號的區域(「809」 /「829」 /「849」) 。我如何驗證用戶是否用三個區號之一正確鍵入了電話號碼?

回答

1

更改/\A(\d{10}|\(?\d{3}\)?[-. ]\d{3}[-.]\d{4})\z/到:

/\A(\(?(809|829|849)\)?[-. ]\d{3}[-.]\d{4})\z/ 

我冒昧地丟下你所匹配的部分任何十位數字 - 不知道爲什麼它在那裏或應該如何在你的上下文中使用。

0

您可以編寫一些自定義的驗證

validate do 
    valid_phone_codes = [ "007", "042", ...] 
    valid_phone_codes.each do |valid_code| 
    # Also handle optional parenthesis 
    return true if self.phone_number.starts_with?(valid_code, "(#{valid_code})") 
    end 
    errors.add(:phone_numbers, "Must start with a valid country code (one of #{valid_phone_codes.join(', ')}") 
    false 
end 

或者,如果你願意,你可以在一個功能def valid_country_codes聲明這個代碼,然後添加一行

validate :valid_country_codes 
+0

當前的正則表達式包含可選的parens來包裝區域代碼。不確定這種方法如何工作。 –

+0

我想你可以用'regexp'喂'starts_with?' –

+0

嗯不,你不能,[你可以喂很多參數start_with?](http://apidock.com/ruby/String/start_with%3F),我會更新代碼 –