rdtvaacar / phonenumber
Requires
- php: >=7.1
- giggsey/libphonenumber-for-php: 7.* || 8.*
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-28 20:45:54 UTC
README
PHP的电话号码库。
此库是围绕 giggsey/libphonenumber-for-php 的一个薄包装,它本身是 Google的libphonenumber 的一个端口。
它提供了等效的功能,以下是一些实现差异:
PhoneNumber
是一个不可变类;可以安全地传递,无需担心它被更改的风险;PhoneNumber
不仅仅是一个简单的数据容器,它还提供了解析、格式化和验证电话号码的所有方法;它透明地封装了PhoneNumberUtil
。
安装
此库可以通过 Composer 安装。
composer require brick/phonenumber
要求
此库需要 PHP 7.1 或更高版本。对于 PHP 5.6 和 PHP 7.0 的支持,请使用版本 0.1
。
项目状态和发布流程
虽然此库仍在开发中,但它经过充分测试,应该足够稳定,可以在生产环境中使用。
当前版本编号为 0.x.y
。当引入非破坏性更改(添加新方法、优化现有代码等)时,y
将增加。
当引入破坏性更改时,将始终启动新的 0.x
版本周期。
因此,可以将项目锁定到给定的版本周期,例如 0.2.*
。
如果您需要升级到较新的版本周期,请查看 发布历史 以获取每个进一步的 0.x.0
版本引入的更改列表。
快速入门
所有类都位于 Brick\PhoneNumber
命名空间中。
要获取 PhoneNumber
的实例,请使用 parse()
方法
- 使用国际号码:
PhoneNumber::parse('+336123456789')
; - 使用国家号码和区号:
PhoneNumber::parse('01 23 45 67 89', 'FR')
;
验证号码
parse()
方法对号码相当宽容;它基本上尝试匹配国家代码,并验证此国家的电话号码长度。
如果号码确实格式不正确,它将抛出 PhoneNumberParseException
use Brick\PhoneNumber\PhoneNumber; use Brick\PhoneNumber\PhoneNumberParseException; try { $number = PhoneNumber::parse('+333'); } catch (PhoneNumberParseException $e) { // 'The string supplied is too short to be a phone number.' }
在大多数情况下,建议进行额外的验证步骤,使用 isValidNumber()
或 isPossibleNumber()
if (! $number->isPossibleNumber()) { // a more lenient and faster check than `isValidNumber()` } if (! $number->isValidNumber()) { // strict check relying on up-to-date metadata library }
作为一个经验法则,请执行以下操作:
- 当号码来自用户输入时,进行完整验证:
parse()
并捕获PhoneNumberParseException
,如果没有发生异常,则调用isValidNumber()
(或对更宽容的检查使用isPossibleNumber()
); - 当号码稍后从您的数据库检索,并且之前已经验证过,您只需执行盲目的
parse()
。
格式化号码
基本格式化
您可以使用来自 PhoneNumberFormat 类的常量使用 format()
。
$number = PhoneNumber::parse('+41446681800'); $number->format(PhoneNumberFormat::E164); // +41446681800 $number->format(PhoneNumberFormat::INTERNATIONAL); // +41 44 668 18 00 $number->format(PhoneNumberFormat::NATIONAL); // 044 668 18 00 $number->format(PhoneNumberFormat::RFC3966); // tel:+41-44-668-18-00
格式化以从另一个国家打电话
您可能希望以特定国家观众为对象,在需要时提供正确的国际前缀。这正是 formatForCallingFrom()
所做的。
$number = PhoneNumber::parse('+447123456789'); $number->formatForCallingFrom('GB'); // 07123 456789 $number->formatForCallingFrom('FR'); // 00 44 7123 456789 $number->formatForCallingFrom('US'); // 011 44 7123 456789
号码类型
在某些情况下,可以使用getNumberType()
方法确定电话号码的类型(固定电话、移动电话等),该方法返回来自PhoneNumberType类的常量。
PhoneNumber::parse('+336123456789')->getNumberType(); // PhoneNumberType::MOBILE PhoneNumber::parse('+33123456789')->getNumberType(); // PhoneNumberType::FIXED_LINE
如果类型未知,将返回PhoneNumberType::UNKNOWN
值。请检查PhoneNumberType
类以获取所有可能的值。
号码信息
您可以从电话号码中提取以下信息
$number = PhoneNumber::parse('+447123456789'); echo $number->getRegionCode(); // GB echo $number->getCountryCode(); // 44 echo $number->getNationalNumber(); // 7123456789
示例号码
您可以为国家代码和可选的号码类型(默认为固定电话)获取示例号码。这可以用作输入字段的占位符,例如。
echo PhoneNumber::getExampleNumber('FR'); // +33123456789 echo PhoneNumber::getExampleNumber('FR', PhoneNumberType::MOBILE); // +33612345678
getExampleNumber()
的返回类型是PhoneNumber
实例,因此您可以按自己的方式对其进行格式化。
echo PhoneNumber::getExampleNumber('FR')->formatForCallingFrom('FR'); // 01 23 45 67 89
如果对于国家代码/号码类型组合没有可用的示例电话号码,将抛出PhoneNumberException
异常。