aariess/phone

第一个 Composer 包

维护者

详细信息

github.com/aariess/phone

源代码

安装: 8

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 139

语言:Ruby

类型:php

dev-master 2017-02-24 10:11 UTC

This package is not auto-updated.

Last update: 2024-09-26 19:50:21 UTC


README

Beta Gem Version Gem Version Build Status Dependency Status Code Climate

解析、验证和创建电话号码

版本

此文档适用于未发布的开发分支。

描述

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,埃蒂安·萨姆森,卢克·兰德尔,雅各布·希尔德,蒂格·扎哈里亚