rdtvaacar/phonenumber

电话号码库

0.2.1 2018-11-12 21:58 UTC

This package is auto-updated.

Last update: 2024-09-28 20:45:54 UTC


README

PHP的电话号码库。

Build Status Coverage Status Latest Stable Version Total Downloads License

此库是围绕 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异常。