验证没有国家/地区代码的电话号码

时间:2016-05-30 18:07:03

标签: ruby-on-rails

在我的rails应用中,我的用户可以输入他们的电话号码。

我正在使用phonelib来验证电话号码,但我的服务只能在一个国家/地区使用,所以我不希望我的用户每次输入电话号码到服务器时输入国家/地区代码

我尝试像我这样配置phonelib.rb

Phonelib.default_country = "CHE"

但是当我尝试输入电话号码时,如果我没有输入+41国家/地区代码,它仍然会无效。

是否可以抛出phonelib或更好的其他解决方案?

2 个答案:

答案 0 :(得分:1)

来自"未来证据"我仍然建议保留国家代码。

默认情况下,您可以在所有手机字段中显示国家/地区代码,这样,如果只有一个国家/地区代码,用户就不必输入,但这样您就可以确定你的数据质量。

无论如何,只是我的2美分..

答案 1 :(得分:0)

您可以捕获任何电话号码,但有一个自定义验证器使用Phonelib

这里验证输入并告诉用户它的期望。

应用程序/模型/ model_name.rb

validates_with PhoneCountryCodeValidator, fields: [:client_mobile], country_codes: ["CH", :ch, Phonelib.default_country]

应用程序/模型/关切/ phone_country_code_validator.rb

class PhoneCountryCodeValidator < ActiveModel::Validator
  def validate(record)
    options[:fields].any? do |field|
      phone_number = record.send(field)
      phone_country = Phonelib.parse(phone_number).country
      phone_country_code = phone_country.to_s.upcase

      options[:country_codes].any? do |valid_country|
        valid_country_code = valid_country.to_s.upcase
        unless phone_country_code == valid_country_code
          record.errors.add(field, "has an invalid country code:
            #{phone_country_code} should be #{valid_country_code}")
        end
      end
    end
  end
end

另请查看此问题以获取更多详细信息:https://github.com/daddyz/phonelib/issues/136