我有一个国际号码作为字符串,所以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'宝石未成功和“国家”#39;宝石:
c = Country.find_country_by_national_prefix('852')
puts c.alpha2
错误消息为'undefined method alpha2'
这应该很容易。有什么想法吗?一如既往地谢谢。
答案 0 :(得分:0)
通过一些测试,看起来香港的national_prefix
值(countries
宝石)"None"
。您可能希望使用Country#find_country_by_country_code
,如此:Country.find_country_by_country_code('852')
这将返回香港,然后您可以拨打#alpha2
。
在旁注中,您可能需要先检查c
是否nil
,然后再尝试拨打alpha2
。
答案 1 :(得分:-1)
虽然“虚假”宝石仍然非常有用,但我尝试使用“countries”宝石和“iso_country_codes”宝石,但很难取得部分成功,所以我最终从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
我希望这有助于其他人。