J’essaie de mettre au point une regex complète pour valider les numéros de téléphone. L'idéal serait qu'elle gère les formats internationaux, mais elle doit gérer les formats américains, y compris les suivants :
Je vais répondre avec ma tentative actuelle, mais j'espère que quelqu'un a quelque chose de mieux et/ou de plus élégant.
Il s'avère qu'il existe une sorte de spécification à ce sujet, du moins pour l'Amérique du Nord, appelée [NANP][1].
Vous devez spécifier exactement ce que vous voulez. Quels sont les délimiteurs légaux ? Espaces, tirets et points ? Aucun délimiteur n'est autorisé ? Peut-on mélanger les délimiteurs (par exemple, +0.111-222.3333) ? Comment les extensions (par exemple, 111-222-3333 x 44444) vont-elles être traitées ? Qu'en est-il des numéros spéciaux, comme le 911 ? L'indicatif régional sera-t-il facultatif ou obligatoire ?
Voici une expression rationnelle pour un numéro à 7 ou 10 chiffres, les extensions étant autorisées, les délimiteurs étant des espaces, des tirets ou des points :
^(?:(?:\+?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+))?$
[1] : http://en.wikipedia.org/wiki/North_American_Numbering_Plan
Avez-vous jeté un coup d'œil à [RegExLib][1] ?
La saisie d'un numéro de téléphone américain a fait apparaître toute une liste de possibilités.
[1] : http://regexlib.com/
Voici ce que j'ai fait de mieux jusqu'à présent. Il gère les formats ci-dessus, mais je suis sûr qu'il manque d'autres formats possibles.
^\d?(?:(?:[\+]?(?:[\d]{1,3}(?:[ ]+|[\-.])))?[(]?(?:[\d]{3})[\-/)]?(?:[ ]+)?)?(?:[a-zA-Z2-9][a-zA-Z0-9 \-.]{6,})(?:(?:[ ]+|[xX]|(i:ext[\.]?)){1,2}(?:[\d]{1,5}))?$