PHP Manual
/
Algorytmy

Walidacja i formatowanie numerów telefonów

18. 06. 2021

Obsah článku

Nie ma prostego sposobu na sprawdzanie poprawności i formatowanie numerów telefonów w PHP, więc napisałem prostą bibliotekę, która nie ma żadnych zależności, a mimo to radzi sobie z tą rolą.

Celem jest sprawdzenie formatu numeru telefonu lub przekonwertowanie go na podstawową postać kanoniczną (która jest zawsze poprawna).

Instalacja strony

Po prostu przez kompozytora:

$ composer require baraja-core/phone-number

Można też pobrać pakiet Download on GitHub.

Jak korzystać z biblioteki

Zasada działania tego narzędzia opiera się na formatowaniu i walidacji numerów telefonów pochodzących od użytkownika lub ze źródeł, nad którymi użytkownik nie ma kontroli.

Najczęstszym zastosowaniem jest poprawianie formatowania numeru telefonu:

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

Funkcja koryguje formatowanie liczby i zwraca łańcuch +420 777 123 456.

Jeśli użytkownik nie określi prefiksu, przyjmowany jest prefiks +420. Za pomocą drugiego parametru można zmienić domyślne preferencje:

// zwroty: +421 777 123 456
\Baraja\PhoneNumber\PhoneNumberFormatter::fix('+420 777123456', 421);

Kod telefonu jest nadpisywany tylko wtedy, gdy użytkownik go nie wprowadzi i nie zostanie on wykryty automatycznie.

Formatowanie wejścia i wyjścia

Ciąg wejściowy może wyglądać (prawie) dowolnie. Wbudowany algorytm może automatycznie usuwać nieprawidłowe znaki (np. niektórzy użytkownicy wpisują obok numeru telefonu dopisek, który zostanie automatycznie usunięty). Nie trzeba więc martwić się o formatowanie danych wejściowych, ale dane wyjściowe będą zawsze spójne.

Dane wyjściowe zawsze wyglądają tak samo (są normalizowane do formatu kanonicznego).

Format ogólny jest następujący:

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

Jeśli użytkownik wprowadzi nieprawidłowe dane (lub dane, których nie można automatycznie skorygować), zostanie zgłoszony wyjątek.

Wyłapywanie błędów

Jeśli liczba nie może być bezpiecznie znormalizowana do postaci bazowej lub nie istnieje, rzuca wyjątek InvalidArgumentException.

Jeśli chcesz przekonwertować wyjątek na wartość logiczną, użyj wbudowanego walidatora zasobów:

\Baraja\PhoneNumber\PhoneNumberValidator::isValid('123'); // fałsz
\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