20steps / libphonenumber-for-php
Google的libphonenumber的PHP版本
Requires
- php: >=5.3.2
- ext-mbstring: *
- giggsey/locale: ^1.2
Requires (Dev)
- pear/pear-core-minimal: ^1.9
- pear/pear_exception: ^1.0
- pear/versioncontrol_git: dev-master
- phing/phing: ^2.7
- phpunit/phpunit: ^4.8|^5.0
- satooshi/php-coveralls: ^1.0
- symfony/console: ^2.8|^3.0
- dev-master / 8.x-dev
- 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-issue175
This package is not auto-updated.
Last update: 2024-09-29 02:19:49 UTC
README
这是什么?
这是一个用于解析、格式化、存储和验证国际电话号码的PHP库。该库基于Google的libphonenumber。
安装
目前支持PHP 5.3至PHP 7.1版本。HHVM也受支持。
需要PECL mbstring扩展。
建议使用composer安装库。
$ composer require giggsey/libphonenumber-for-php
您也可以使用任何其他PSR-4兼容的自动加载器。
如果您不使用composer,请确保还加载了此项目依赖的任何其他库,例如giggsey/locale。
文档
在线演示
提供在线演示,源码可在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);
常见问题解答
无效号码有问题吗?
此库使用来自谷歌的libphonenumber的电话号码元数据。如果此库按预期工作,它应与谷歌项目的Java版本提供相同的结果。
如果您认为某个电话号码返回了错误的结果,请首先通过他们的在线演示使用libphonenumber进行测试。如果返回的结果与本项目相同,并且您认为存在错误,请在libphonenumber项目中提出问题。
如果谷歌的在线演示与libphonenumber-for-php 演示给出了不同的结果,那么请在此处提出问题。
生成数据
通常不需要生成数据,因为这个存储库通常始终会有最新的元数据。
如果您需要生成数据,命令由Phing提供。确保您已安装所有dev composer依赖项,然后运行
$ vendor/bin/phing compile
此编译过程在libphonenumber项目中克隆了在METADATA-VERSION.txt中指定的版本。
与框架集成
存在其他一些包,可以将libphonenumber-for-php集成到框架中。
- Symfony: PhoneNumberBundle
- Laravel: Laravel Phone
- Yii2: PhoneInput
- Kohana: PhoneNumber
这些包由第三方提供,其质量无法保证。