Библиотека PHP для анализа, форматирования, хранения и проверки международных телефонных номеров. Эта библиотека основана на libphonenumber от Google.
В настоящее время поддерживаются версии PHP от 7.4 до PHP 8.4.
Требуется расширение PECL mbstring.
Для установки библиотеки рекомендуется использовать композитор.
composer require giggsey/libphonenumber-for-php
Вы также можете использовать любой другой автозагрузчик, совместимый с PSR-4.
Если вы не используете композитор, убедитесь, что вы также загрузили все зависимости, которые есть в этом проекте, например giggsey/locale.
Если вы хотите использовать только базовую функциональность 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 libphonenumberPhoneNumber#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 = libphonenumbergeocoding 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. Если эта библиотека работает должным образом, она должна дать тот же результат, что и Java-версия проекта Google.
Если вы считаете, что номер телефона возвращает неправильный результат, сначала проверьте его с помощью libphonenumber через онлайн-демо. Если это возвращает тот же результат, что и этот проект, и вы чувствуете, что это ошибка, сообщите об этом как о проблеме в проекте libphonenumber.
Если онлайн-демоверсия Google дает другой результат, чем демо-версия libphonenumber-for-php, пожалуйста, поднимите проблему здесь.
Генерация данных обычно не требуется, поскольку этот репозиторий обычно всегда содержит актуальные метаданные данных.
Если вам нужно сгенерировать данные, команды предоставляются Phing. Убедитесь, что у вас установлены все зависимости dev Composer, затем запустите
vendor/bin/phing compile
Этот процесс компиляции клонирует проект libphonenumber в версии, указанной в METADATA-VERSION.txt.
В этом проекте используется PHPUnit Bridge для обеспечения совместимости поддерживаемых версий PHP.
Чтобы запустить тесты локально, запустите скрипт ./phpunit
.
Существуют и другие пакеты, которые интегрируют libphonenumber-for-php в фреймворки.
Рамки | Пакеты |
---|---|
Симфония | ТелефонНомерПакет |
Ларавел | Телефон Ларавел |
Юи2 | Телефонный ввод |
Кохана | Номер телефона |
опечатка3 | Расширение телефона TYPO3 |
Эти пакеты поставляются третьими лицами, и их качество не может быть гарантировано.