Rexact
Cheatsheet

Regex numéro de téléphone allemand

Un numéro allemand s'écrit 0, puis un indicatif de réseau local de 2 à 5 chiffres (030 Berlin, 069 Francfort, 0221 Cologne), puis l'abonné, sans longueur fixe : de 5 à 15 chiffres après le 0. Les mobiles ont un préfixe 015x, 016x ou 017x suivi de 7 à 9 chiffres. Avec +49, le 0 de tête disparaît. La Bundesnetzagentur publie des numéros fictifs pour les médias, par exemple 030 23125 000 à 999 ou 0171 39200 00 à 99 : ce sont de bons exemples de test. La regex mobile de validator.js les refuse dès qu'il y a une espace, celle de sent.dm n'accepte ni +49 ni séparateur, et celle de CakePHP accepte même la chaîne vide. Voici un motif qui distingue mobiles, fixes et numéros spéciaux, comparé à ces tentatives.

/^(?:(?:\+49|0049) ?|0)(?:(?:15[0-25-9](?:[ /-]?[0-9]){8}|1(?:6[023]|7[0-9])(?:[ /-]?[0-9]){7,8})|(?![78]0[01]|709|90[0-5])[2-9](?:[ /-]?[0-9]){4,14}|800(?:[ /-]?[0-9]){7,12}|180(?:[ /-]?[0-9]){5,11}|700(?:[ /-]?[0-9]){8}|900(?:[ /-]?[135](?:[ /-]?[0-9]){6}|[ /-]?9(?:[ /-]?[0-9]){7}))$/
passe 35/35 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^(?:(?:\\+49|0049) ?|0)(?:(?:15[0-25-9](?:[ /-]?[0-9]){8}|1(?:6[023]|7[0-9])(?:[ /-]?[0-9]){7,8})|(?![78]0[01]|709|90[0-5])[2-9](?:[ /-]?[0-9]){4,14}|800(?:[ /-]?[0-9]){7,12}|180(?:[ /-]?[0-9]){5,11}|700(?:[ /-]?[0-9]){8}|900(?:[ /-]?[135](?:[ /-]?[0-9]){6}|[ /-]?9(?:[ /-]?[0-9]){7}))$", "");
re.test(input);

Limites

  • Valide seulement la FORME : ne vérifie pas que le numéro est attribué ni que l'indicatif de réseau local existe : tout indicatif de 3 chiffres de 2xx à 9xx passe, la liste réelle (plusieurs milliers d'indicatifs) étant publiée par la Bundesnetzagentur.
  • Les longueurs (5 à 15 chiffres après le 0 pour un fixe, 11 pour un mobile 015x, 10 ou 11 pour 016x et 017x) viennent des métadonnées de libphonenumber, pas de la Mitteilung 148/2021, qui ne donne que les plages fictives. Le préfixe 0153 (quasi inutilisé) est rejeté.
  • Après +49 ou 0049, le 0 de tronc ne doit pas être gardé : « +49 030… » est rejeté, de même que la forme « +49 (0) 30… » encore courante en Allemagne. Les parenthèses autour de l'indicatif (« (030) 23125123 ») sont rejetées : retirez-les avant validation.
  • Une espace, une barre oblique ou un tiret facultatifs sont acceptés entre deux chiffres quelconques : « 03 0 23125 1 23 » passe, ce motif ne distinguant pas les groupes. Les extensions (« -0 », « x12 ») ne sont pas gérées.

Numéros de téléphone d’autres pays

Pages liées