Sto cercando di mettere insieme una regex completa per convalidare i numeri di telefono. Idealmente dovrebbe gestire i formati internazionali, ma deve gestire i formati statunitensi, compresi i seguenti:
Risponderò con il mio attuale tentativo, ma spero che qualcuno abbia qualcosa di meglio e/o più elegante.
Si scopre che c'è una specie di specifica per questo, almeno per il Nord America, chiamata NANP.
È necessario specificare esattamente ciò che si vuole. Quali sono i delimitatori legali? Spazi, trattini e punti? Nessun delimitatore consentito? Si possono mischiare i delimitatori (ad esempio, +0.111-222.3333)? Come saranno gestite le estensioni (ad esempio, 111-222-3333 x 44444)? E i numeri speciali, come il 911? Il prefisso sarà opzionale o obbligatorio?
Ecco una regex per un numero di 7 o 10 cifre, con estensioni permesse, i delimitatori sono spazi, trattini o punti:
^(?:(?:\+?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+))?$
Avete dato un'occhiata a RegExLib?
Inserendo il numero di telefono degli Stati Uniti ha portato una bella lista di possibilità.
Ecco il mio miglior tentativo finora. Gestisce i formati di cui sopra, ma sono sicuro che mi mancano altri possibili formati.
^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$