PHP Manual
/
Algoritmy

Validace a formátování telefonních čísel

18. 06. 2021

Obsah článku

V PHP neexistuje jednoduchý způsob, jak validovat a formátovat telefonní čísla, proto jsem pro to napsal jednoduchou knihovnu, která nemá žádné závislosti, ale přesto zvládne tuto roli obsloužit.

Cílem je zkontrolovat formát telefonního čísla, případně ho převést na základní kanonický tvar (který je vždy validní).

Instalace

Jednoduše composerem:

$ composer require baraja-core/phone-number

Nebo si balík Stáhněte na GitHubu.

Jak knihovnu použít

Princip tohoto nástroje je založen na formátování a validaci telefonních čísel od uživatele, nebo ze zdrojů, nad kterými nemáte kontrolu.

Nejčastější použití je oprava formátování telefonního čísla:

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

Funkce opraví formátování čísla a vrátí řetězec +420 777 123 456.

Pokud uživastel nezadá žádnou předvolbu, předpokládá se předvolba +420. Výchozí předvolbu můžete změnit druhým parametrem:

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

Telefonní předvolba se přepíše jen v případě, kdy ji uživatel nezadá a nepodaří se detekovat automaticky.

Formátování vstupu a výstupu

Vstupní řetězec může vypadat (téměř) libovolným způsobem. Vestavěný algoritmus umí automaticky odebrat nevalidní znaky (například někteří uživatelé k telefonnímu číslu píší poznámku, která bude automaticky odebrána). Formátování vstupu tedy nemusíte vůbec řešit, výstup ale bude vždy konzistentní.

Výstup vypadá vždy stejně (je normalizován na kanonický tvar).

Obecný formát je:

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

Pokud předáte nevalidní vstup (nebo vstup, který nelze automaticky opravit), bude vyhozena výjimka.

Zachytávání chyb

Pokud číslo nelze bezpečně normalizovat na základní tvar, nebo neexistuje, vyhazujeme výjimku \InvalidArgumentException.

Pokud si přejete převést výjimku na boolean, použijte vestavěný asset validátor:

\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.

Potřebujete poradit s PHP?

Nabízím trénink vývojářů, konzultace, školení a analýzu návrhových vzorů. Osobně v Praze nebo online.

Napište mi, pokud si nevíte rady.

Lektor: Jan Barášek

Status:
All systems normal.
2024