2008-08-28 8 views

Répondre

28

La regex dans la réponse acceptée ne correspond pas à tous les nombres britanniques valides, car elle est trop restrictive (des plages de numéros supplémentaires ont été ouvertes entre-temps, comme 0203, qu'elle considère comme invalide).

numéros de téléphone au Royaume-Uni suivent des règles assez simples:

  • Ils peuvent être 10 ou 11 chiffres (à l'exception de quelques numéros spéciaux, mais vous avez peu de chances d'avoir besoin de valider les)

  • Ils sont constitués d'un indicatif régional suivi d'un numéro local. L'indicatif régional a une longueur comprise entre trois et cinq chiffres, et la partie locale du numéro occupe la longueur restante de 10 ou 11 chiffres. À toutes fins pratiques, personne ne cite jamais la partie locale de son numéro, donc vous pouvez ignorer la distinction maintenant, sauf en ce qui concerne le formatage.

  • Ils commencent par zéro.

  • Le deuxième chiffre peut être n'importe quoi. Actuellement, aucun numéro valide ne commence par 04 ou 06, mais rien n'empêche l'utilisation de ces plages à l'avenir. (03 a été récemment mis en service)

  • Ils peuvent être formatés avec un ensemble de parenthèses et avec des espaces (un ou plusieurs, dans des positions différentes), mais ceux-ci sont entièrement facultatifs.

Par conséquent, une expression de travail de base pour les numéros de téléphone au Royaume-Uni pourrait ressembler à ceci:

/^\(?0(*\d\)?){9,10}$/ 

Cela va vérifier 10 ou 11 numéros de chiffres, en commençant par un zéro, avec des espaces de mise en forme entre l'une des les chiffres, et éventuellement un ensemble de parenthèses pour l'indicatif régional.

(et oui, cela permettrait des parenthèses mal mises en correspondance, car je ne vérifie pas qu'il n'y a qu'un seul crochet de fermeture.) Cela rendrait l'expression beaucoup plus complexe, et je n'ai pas le temps pour ça. maintenant, mais ne hésitez pas à ajouter si vous le souhaitez)

Par ailleurs, si vous voulez faire un filtrage supplémentaire, vous pouvez également noter les règles suivantes:

  • les numéros commençant 08, 09 et 070 sont des numéros de prix spéciaux, et ne seront généralement pas donnés en tant que numéros privés , peut donc être exclu si vous validez un numéro privé. Numéros sont mobiles (sauf 070, voir ci-dessus), donc peuvent être exclus si vous validez spécifiquement pour une ligne fixe.

+0

En haut de la page avec cette réponse! –

+0

Je voudrais ajouter un commentaire (surtout maintenant en 2016) que le remplissage automatique à partir de carnets d'adresses, etc, peuplera les numéros de téléphone avec le code de numérotation international de 44 ou +44 en remplaçant le 0. Mon regex-foo n'est pas fort assez pour modifier votre regex pour résoudre ce problème. – Jmons

Questions connexes