aariess / phone
第一个 Composer 包
Requires
- php: >=5.6.0
This package is not auto-updated.
Last update: 2024-09-26 19:50:21 UTC
README
解析、验证和创建电话号码
版本
此文档适用于未发布的开发分支。
- 当前版本:1.3.0.beta1
- 当前稳定版:1.2.3
描述
Ruby 库,用于电话号码解析、验证和格式化。
功能
自动检测国家和区域代码
在解析时,电话会尽可能自动检测国家和区域代码。为此,电话使用存储在 data/phone/countries.yml
中的数据。
每个国家代码都可以有一个名为 area_code
的正则表达式,用于描述该特定国家的区域代码的外观。
如果没有指定 area_code
正则表达式,则使用默认值,Phoner::Phone::DEFAULT_AREA_CODE
(适用于美国)。
验证
验证非常宽松,基本上它会去除所有非数字或 '+' 字符的内容
Phoner::Phone.valid? 'blabla 091/512-5486 blabla'
格式化
格式化是通过 #format
方法完成的。该方法接受一个 Symbol
或一个 String
。
当给出一个字符串时,它会使用以下字段插入字符串
- %c - 国家代码(385)
- %a - 区域代码(91)
- %A - 带前导零的区域代码(091)
- %n - 电话号码(5125486)
- %f - 电话号码的前 @@n1_length 个字符(通过 Phoner::Phone.n1_length 配置),默认为 3(512)
- %l - 电话号码的最后一个字符(5486)
- %x - 扩展号码
pn = Phoner::Phone.parse('+385915125486') pn.to_s # => "+385915125486" pn.format("%A/%f-%l") # => "091/512-5486" pn.format("+ %c (%a) %n") # => "+ 385 (91) 5125486"
当给出一个符号时,它用作在哈希中查找格式的查找。
pn.format(:europe) # => "+385 (0) 91 512 5486" pn.format(:us) # => "(234) 123-4567" pn.format(:default_with_extension) # => "+3851234567x143"
您可以像这样添加自己的自定义命名格式
Phoner::Phone.named_formats[:short] = '%A/%n1-%n2' pn.format(:short) # => 091/512-5486
通过 ISO 码查找国家
如果您没有国家代码,但知道电话来自哪个国家,您可以使用国家 ISO 码(例如 'de', 'es', 'us', ...)来检索国家。请记住在执行此查找之前调用 Phoner::Country.load
。
if country = Phoner::Country.find_by_country_isocode(user_country_isocode) phone_number = Phoner::Phone.parse(user_input, :country_code => country.country_code) end
示例
require 'phone'
初始化
使用号码、区域代码、国家代码和扩展号码初始化一个新的电话对象
Phoner::Phone.new('5125486', '91', '385')
Phoner::Phone.new(:number => '5125486', :area_code => '91', :country_code => '385', :extension => '143')
解析
通过解析字符串创建一个新的电话对象。Phoner::Phone 会尽力检测国家和区域代码
Phoner::Phone.parse '+385915125486' Phoner::Phone.parse '00385915125486'
如果字符串中没有给出国家或区域代码,您必须设置它,否则它不会工作
Phoner::Phone.parse '091/512-5486', :country_code => '385' Phoner::Phone.parse '(091) 512 5486', :country_code => '385'
如果您觉得这样做很麻烦,可以设置默认国家代码一次
Phoner::Phone.default_country_code = '385' Phoner::Phone.parse '091/512-5486' Phoner::Phone.parse '(091) 512 5486'
同样也适用于区域代码
Phoner::Phone.parse '451-588', :country_code => '385', :area_code => '47'
或者
Phoner::Phone.default_country_code = '385' Phoner::Phone.default_area_code = '47' Phoner::Phone.parse '451-588'
测试国家
- [AU] 澳大利亚
- [BA] 波斯尼亚和黑塞哥维那
- [BE] 比利时
- [DE] 德国
- [ES] 西班牙
- [FR] 法国
- [GB] 英国
- [HR] 克罗地亚
- [HU] 匈牙利
- [IE] 爱尔兰
- [ME] 黑山
- [NL] 荷兰
- [NZ] 新西兰
- [PT] 葡萄牙
- [RS] 塞尔维亚
- [SE] 瑞典
- [SI] 斯洛文尼亚
- [UA] 乌克兰
- [US] 美国
- [UY] 乌拉圭
- [ZA] 南非
已知问题
德国和西班牙的区域代码存在问题。
需求
安装
$ gem install phone
或者作为 Rails 插件
$ script/plugin install git://github.com/carr/phone.git
版权
版权所有 (c) 2010-2013 托米斯拉夫·卡尔, Infinum 版权所有 (c) 2013 多恩·莫里森
有关详细信息,请参阅 LICENSE.txt。
贡献者
多恩·莫里森,迈克尔·斯奎尔斯,托德·艾克尔(Fooala, Inc.),chipiga,埃蒂安·萨姆森,卢克·兰德尔,雅各布·希尔德,蒂格·扎哈里亚