2015-06-19 118 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),我会更新代码 –