giggsey / libphonenumber-for-php
Google的libphonenumber的PHP版本
Requires
- php: >=5.3.2
- giggsey/locale: ^1.7|^2.0
- symfony/polyfill-mbstring: ^1.17
Requires (Dev)
- pear/pear-core-minimal: ^1.9
- pear/pear_exception: ^1.0
- pear/versioncontrol_git: ^0.5
- phing/phing: ^2.7
- php-coveralls/php-coveralls: ^1.0|^2.0
- symfony/console: ^2.8|^3.0|^v4.4|^v5.2
- symfony/phpunit-bridge: ^4.2 || ^5
Replaces
- giggsey/libphonenumber-for-php-lite: 8.13.45
- dev-master / 8.x-dev
- 8.13.45
- 8.13.44
- 8.13.43
- 8.13.42
- 8.13.41
- 8.13.40
- 8.13.39
- 8.13.38
- 8.13.37
- 8.13.36
- 8.13.35
- 8.13.34
- 8.13.33
- 8.13.32
- 8.13.31
- 8.13.30
- 8.13.29
- 8.13.28
- 8.13.27
- 8.13.26
- 8.13.25
- 8.13.24
- 8.13.23
- 8.13.22
- 8.13.21
- 8.13.20
- 8.13.19
- 8.13.18
- 8.13.17
- 8.13.16
- 8.13.15
- 8.13.14
- 8.13.13
- 8.13.12
- 8.13.11
- 8.13.10
- 8.13.9
- 8.13.8
- 8.13.7
- 8.13.6
- 8.13.5
- 8.13.4
- 8.13.3
- 8.13.2
- 8.13.1
- 8.13.0
- 8.12.57
- 8.12.56
- 8.12.55
- 8.12.54
- 8.12.53
- 8.12.52
- 8.12.51
- 8.12.50
- 8.12.49
- 8.12.48
- 8.12.47.1
- 8.12.47
- 8.12.46
- 8.12.45
- 8.12.44
- 8.12.43
- 8.12.42
- 8.12.41
- 8.12.40
- 8.12.39
- 8.12.38
- 8.12.37
- 8.12.36
- 8.12.35
- 8.12.34
- 8.12.33
- 8.12.32
- 8.12.31
- 8.12.30
- 8.12.29
- 8.12.28
- 8.12.27
- 8.12.26
- 8.12.25
- 8.12.24
- 8.12.23
- 8.12.22
- 8.12.21
- 8.12.20
- 8.12.19
- 8.12.18
- 8.12.17
- 8.12.16
- 8.12.15
- 8.12.14
- 8.12.13
- 8.12.12
- 8.12.11
- 8.12.10
- 8.12.9
- 8.12.8
- 8.12.7.1
- 8.12.7
- 8.12.6
- 8.12.5
- 8.12.4
- 8.12.3
- 8.12.2
- 8.12.1
- 8.12.0
- 8.11.5
- 8.11.4
- 8.11.3
- 8.11.2
- 8.11.1
- 8.11.0
- 8.10.23
- 8.10.22
- 8.10.21
- 8.10.20
- 8.10.19
- 8.10.18
- 8.10.17
- 8.10.16
- 8.10.15
- 8.10.14
- 8.10.13
- 8.10.12
- 8.10.11
- 8.10.10
- 8.10.9
- 8.10.8
- 8.10.7
- 8.10.6
- 8.10.5
- 8.10.4
- 8.10.3
- 8.10.2
- 8.10.1
- 8.10.0
- 8.9.16
- 8.9.15
- 8.9.14
- 8.9.13
- 8.9.12
- 8.9.11
- 8.9.10
- 8.9.9
- 8.9.8
- 8.9.7
- 8.9.6
- 8.9.5
- 8.9.4
- 8.9.3
- 8.9.2
- 8.9.1
- 8.9.0
- 8.8.11
- 8.8.10
- 8.8.9
- 8.8.8
- 8.8.7
- 8.8.6
- 8.8.5
- 8.8.4
- 8.8.3
- 8.8.2
- 8.8.1
- 8.8.0
- 8.7.1
- 8.7.0
- 8.6.0
- 8.5.2
- 8.5.1
- 8.5
- 8.4.3
- 8.4.2
- 8.4.1
- 8.4
- 8.3.3.1
- 8.3.3
- 8.3.2
- 8.3.1
- 8.3.0
- 8.2.0
- 8.1.0
- 8.0.1
- 8.0
- 7.7.5
- 7.7.4
- 7.7.3
- 7.7.2
- 7.7.1
- 7.6.1
- 7.6.0
- 7.5.2
- 7.5.1
- 7.5.0
- 7.4.5
- 7.4.4
- 7.4.3
- 7.4.2
- 7.4.1
- 7.3.2
- 7.3.1
- 7.3.0
- 7.2.8
- 7.2.7
- 7.2.6
- 7.2.5
- 7.2.4
- 7.2.3
- 7.2.2
- 7.2.1
- 7.1.1
- 7.1.0
- 7.0.11
- 7.0.10
- 7.0.9
- 7.0.8
- 7.0.7
- 7.0.6
- 7.0.5
- 7.0.4
- 7.0.3
- 7.0.2
- 7.0.1
- 7.0
- 6.3.1
- 6.3
- 6.2.2
- 6.2.1
- 6.2.0.1
- 6.2
- 6.1.1
- 6.1
- 6.0
- 5.9.4
- 5.9.3
- 5.9.2
- 5.9.1
- 5.9
- 5.8.8
- 5.8.4
- 5.8
- 5.7.2
- 5.7
- dev-upstream-8.13.45
This package is auto-updated.
Last update: 2024-09-06 11:27:23 UTC
README
是什么?
这是一个用于解析、格式化、存储和验证国际电话号码的PHP库。这个库基于Google的libphonenumber。
安装
当前支持PHP版本 5.3 到 PHP 8.3。
需要PECL mbstring 扩展。
建议使用composer 安装库。
$ composer require giggsey/libphonenumber-for-php
您也可以使用任何其他PSR-4 兼容的自动加载器。
如果您不使用composer,请确保您还加载了这个项目所需的任何依赖,例如 giggsey/locale。
giggsey/libphonenumber-for-php-lite
如果您只想使用核心PhoneNumber Util功能,您可以使用giggsey/libphonenumber-for-php-lite,它提供了更小的包大小。
文档
在线演示
提供了在线演示,源代码可在giggsey/libphonenumber-example找到。
功能亮点
- 为世界上所有国家和地区的电话号码进行解析/格式化/验证。
getNumberType
- 根据号码本身获取号码类型;能够区分固定电话、移动电话、免付费电话、付费电话、共享成本、VoIP和个人号码(在可行的情况下)。isNumberMatch
- 获取两个号码可能相同的置信度。getExampleNumber
/getExampleNumberByType
- 为所有国家和地区的所有电话号码提供有效示例,可以选择需要哪种类型的示例电话号码。isValidNumber
- 使用长度和前缀信息对区域内的电话号码进行完全验证。PhoneNumberOfflineGeocoder
- 提供与电话号码相关的地理信息。PhoneNumberToTimeZonesMapper
- 提供与电话号码相关的时区信息。PhoneNumberToCarrierMapper
- 提供与电话号码相关的运营商信息。
版本控制
该库将尝试遵循与Google相同的版本号。如果需要,可能会进行额外的发布以修复无法等待Google下一个版本发布的关键问题。
这意味着该项目可能不遵循语义版本控制,而是遵循Google的版本策略。因此,主要版本的跳跃可能实际上不包含任何不兼容的更改。请阅读此类发布的发行说明。
Google试图根据其版本指南中的规定来发布其版本。
快速示例
假设你有一个代表瑞士电话号码的字符串。这是你如何将其解析/归一化到PhoneNumber对象中的方法
$swissNumberStr = "044 668 18 00"; $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); try { $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); var_dump($swissNumberProto); } catch (\libphonenumber\NumberParseException $e) { var_dump($e); }
到此为止,swissNumberProto包含
class libphonenumber\PhoneNumber#9 (7) {
private $countryCode =>
int(41)
private $nationalNumber =>
double(446681800)
private $extension =>
NULL
private $italianLeadingZero =>
NULL
private $rawInput =>
NULL
private $countryCodeSource =>
NULL
private $preferredDomesticCarrierCode =>
NULL
}
现在让我们验证这个号码是否有效
$isValid = $phoneUtil->isValidNumber($swissNumberProto); var_dump($isValid); // true
格式化方法支持几种格式,如下所示
// Produces "+41446681800" echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::E164); // Produces "044 668 18 00" echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::NATIONAL); // Produces "+41 44 668 18 00" echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::INTERNATIONAL);
你也可以选择以其他国家拨打电话的方式格式化号码
// Produces "011 41 44 668 1800", the number when it is dialled in the United States. echo $phoneUtil->formatOutOfCountryCallingNumber($swissNumberProto, "US"); // Produces "00 41 44 668 18 00", the number when it is dialled in Great Britain. echo $phoneUtil->formatOutOfCountryCallingNumber($swissNumberProto, "GB");
地理编码器
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); $swissNumberProto = $phoneUtil->parse("044 668 18 00", "CH"); $usNumberProto = $phoneUtil->parse("+1 650 253 0000", "US"); $gbNumberProto = $phoneUtil->parse("0161 496 0000", "GB"); $geocoder = \libphonenumber\geocoding\PhoneNumberOfflineGeocoder::getInstance(); // Outputs "Zurich" echo $geocoder->getDescriptionForNumber($swissNumberProto, "en_US"); // Outputs "Zürich" echo $geocoder->getDescriptionForNumber($swissNumberProto, "de_DE"); // Outputs "Zurigo" echo $geocoder->getDescriptionForNumber($swissNumberProto, "it_IT"); // Outputs "Mountain View, CA" echo $geocoder->getDescriptionForNumber($usNumberProto, "en_US"); // Outputs "Mountain View, CA" echo $geocoder->getDescriptionForNumber($usNumberProto, "de_DE"); // Outputs "미국" (Korean for United States) echo $geocoder->getDescriptionForNumber($usNumberProto, "ko-KR"); // Outputs "Manchester" echo $geocoder->getDescriptionForNumber($gbNumberProto, "en_GB"); // Outputs "영국" (Korean for United Kingdom) echo $geocoder->getDescriptionForNumber($gbNumberProto, "ko-KR");
短号信息
$shortNumberInfo = \libphonenumber\ShortNumberInfo::getInstance(); // true var_dump($shortNumberInfo->isEmergencyNumber("999", "GB")); // true var_dump($shortNumberInfo->connectsToEmergencyNumber("999", "GB")); // false var_dump($shortNumberInfo->connectsToEmergencyNumber("911", "GB")); // true var_dump($shortNumberInfo->isEmergencyNumber("911", "US")); // true var_dump($shortNumberInfo->connectsToEmergencyNumber("911", "US")); // false var_dump($shortNumberInfo->isEmergencyNumber("911123", "US")); // true var_dump($shortNumberInfo->connectsToEmergencyNumber("911123", "US"));
电话号码与运营商的映射
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); $swissNumberProto = $phoneUtil->parse("798765432", "CH"); $carrierMapper = \libphonenumber\PhoneNumberToCarrierMapper::getInstance(); // Outputs "Swisscom" echo $carrierMapper->getNameForNumber($swissNumberProto, "en");
将电话号码映射到时区
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); $swissNumberProto = $phoneUtil->parse("798765432", "CH"); $timeZoneMapper = \libphonenumber\PhoneNumberToTimeZonesMapper::getInstance(); // returns array("Europe/Zurich") $timeZones = $timeZoneMapper->getTimeZonesForNumber($swissNumberProto);
常见问题解答
无效号码的问题?
这个库使用来自Google的libphonenumber的电话号码元数据。如果这个库按预期工作,它应该与Google项目的Java版本提供相同的结果。
如果你认为某个电话号码返回了错误的结果,首先通过他们的在线演示在libphonenumber中进行测试。如果返回的结果与这个项目相同,并且你认为有错误,请将问题作为一个问题提交给libphonenumber项目。
如果Google的在线演示与libphonenumber-for-php演示给出了不同的结果,那么请在这里提出问题。
生成数据
生成数据通常不需要,因为这个存储库通常会始终有最新的元数据。
如果你需要生成数据,Phing提供了命令。确保你已经安装了所有dev composer依赖项,然后运行
$ vendor/bin/phing compile
这个编译过程会克隆版本在METADATA-VERSION.txt中指定的libphonenumber项目。
运行测试
该项目使用PHPUnit Bridge以保持与支持的PHP版本的兼容性。
要本地运行测试,运行./phpunit
脚本。
与框架集成
其他包存在,可以将libphonenumber-for-php集成到框架中。
这些包由第三方提供,其质量无法保证。