0

我有一个国际号码作为字符串,所以 81312345678(日本,东京号码)或 85212345678(香港),我需要隔离国家代码,日本的情况是 81,香港的情况是 852,以便然后识别该国家/地区的 2 个字母 alpha2 代码。

我已经尝试了以下假宝石:

number = Phony.format('18091231234', :format => :international)
  puts number
  split = Phony.split('85212345678')
  puts split[0]

以香港为例,我现在想取“852”并获取香港的 2 个字母国家代码,然后使用 Plivo api 查找价格。

产生:

+1 809 123 1234
852

我尝试了 'iso_country_codes' gem 失败,并且尝试了 'countries' gem:

c = Country.find_country_by_national_prefix('852')
  puts c.alpha2

错误消息是'undefined method alpha2'这应该很容易。有什么想法吗?一如既往地感谢。

4

2 回答 2

0

稍加测试,看起来香港的national_prefix价值(在countries宝石中)是"None". 你可能想这样使用Country#find_country_by_country_codeCountry.find_country_by_country_code('852')这将返回香港,然后你可以调用#alpha2它。

附带说明一下,在尝试调用它之前,您可能需要检查它c不是。nilalpha2

于 2015-05-07T03:04:59.673 回答
-1

虽然“假”gem 仍然非常有用,但我尝试使用“countries”gem 和“iso_country_codes”gem 时遇到了困难且部分成功,因此我最终从 Plivo 网站下载了定价数据(超过 38,000 行)和将其加载到 postgres 数据库中。

一列是 country_code,另一列是前缀列。在某些情况下,您只需要 country_code 和其他 country_code 和前缀即可获得精确的结果。所以,这里是代码:

get '/iso' do
    number = '447928xxxxxx' #this is a mobile so you need both 44 and 7928
    code = Phony.split(number)
    lookup = code.take(2).join #joins the first 2 elements of the array
    result = DB[:call_pricing].where(:prefix=>lookup).get(:rate_usd)
    if result.nil?
      lookup = code.take(1) 
    result = DB[:call_pricing].where(:prefix=>lookup).get(:rate_usd)
    end
end

我希望这对其他人有帮助。

于 2015-05-09T07:36:18.583 回答