Snažím sa zostaviť komplexný regex na overovanie telefónnych čísel. Ideálne by bolo, keby zvládal medzinárodné formáty, ale musí zvládnuť aj americké formáty vrátane nasledujúcich:
Odpoviem svojím súčasným pokusom, ale dúfam, že niekto má niečo lepšie a/alebo elegantnejšie.
Ukázalo sa, že na to existuje niečo ako špecifikácia, aspoň pre Severnú Ameriku, s názvom NANP.
Musíte presne špecifikovať, čo chcete. Aké sú legálne oddeľovače? Medzery, pomlčky a bodky? Nie je povolený žiadny oddeľovač? Možno oddeľovače miešať (napr. +0.111-222.3333)? Ako sa bude zaobchádzať s príponami (napr. 111-222-3333 x 44444)? Čo so špeciálnymi číslami, ako je 911? Bude smerové číslo voliteľné alebo povinné?
Tu je regex pre 7- alebo 10-miestne číslo s povolenými príponami, oddeľovačmi sú medzery, pomlčky alebo bodky:
^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$
Pozreli ste sa na RegExLib?
Po zadaní amerického telefónneho čísla sa zobrazil celkom slušný zoznam možností.
Tu je môj najlepší pokus. Zvládne vyššie uvedené formáty, ale som si istý, že mi chýbajú niektoré ďalšie možné formáty.
^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$