PHP Manual
/
Алгоритми

Перевірка та форматування телефонних номерів

18. 06. 2021

Не існує простого способу перевірки та форматування телефонних номерів в PHP, тому я написав просту бібліотеку, яка не має ніяких залежностей, але все одно може впоратися з цією роллю.

Мета - перевірити формат телефонного номера, або перетворити його до базової канонічної форми (яка завжди є дійсною).

Установка

Просто композитором:

$ composer require baraja-core/phone-number

Або завантажити пакет Завантажити на GitHub.

Як користуватися бібліотекою

Принцип роботи цього інструменту базується на форматуванні та перевірці телефонних номерів, отриманих від користувача, або з джерел, над якими ви не маєте контролю.

Найпоширеніше використання - виправлення форматування телефонних номерів:

$original = '+420 777123456';
$formatted = \Baraja\PhoneNumber\PhoneNumberFormatter::fix($original);
echo $original . '<br>';
echo $formatted;

Функція виправляє форматування числа і повертає рядок +420 777 123 456.

Якщо користувач не вказав префікс, то приймається префікс +420. Ви можете змінити налаштування за замовчуванням за допомогою другого параметра:

// повертається: +421 777 123 456
\Baraja\PhoneNumber\PhoneNumberFormatter::fix('+420 777123456', 421);

Код телефону перезаписується тільки в тому випадку, якщо користувач його не ввів і він не визначився автоматично.

Форматування вхідних і вихідних даних

Вхідний рядок може мати (майже) довільний вигляд. Вбудований алгоритм може автоматично видаляти недопустимі символи (наприклад, деякі користувачі пишуть поруч з номером телефону примітку, яка буде видалена автоматично). Таким чином, ви можете взагалі не турбуватися про форматування вхідних даних, а вихідні дані завжди будуть узгоджуватися.

Вихідні дані завжди виглядають однаково (вони нормалізовані до канонічного формату).

Загальний формат такий:

+420 777 123 456
| \_________/
Prefix |
National number

Якщо ви надішлете невірні дані (або дані, які не можуть бути автоматично виправлені), буде згенеровано виняток.

Перехоплення помилок

Якщо число не може бути безпечно приведене до базової форми, або не існує, згенерувати виключення \InvalidArgumentException.

Якщо ви бажаєте перетворити виняток у логічний, скористайтеся вбудованим валідатором ресурсів:

\Baraja\PhoneNumber\PhoneNumberValidator::isValid('123'); // false
\Baraja\PhoneNumber\PhoneNumberValidator::isValid('777123456'); // true
\Baraja\PhoneNumber\PhoneNumberValidator::isValid('+420 777123456'); // true
\Baraja\PhoneNumber\PhoneNumberValidator::isValid('+420 777 123 456'); // true
\Baraja\PhoneNumber\PhoneNumberValidator::isValid('+420 77 712 34 56'); // true

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
3.
Status:
All systems normal.
2024