Rexact
Cheatsheet

Regex numéro de téléphone suisse

Un numéro suisse compte 9 chiffres après le 0 de tronc (supprimé avec +41) : indicatif de 2 chiffres (021 Lausanne, 022 Genève, 031 Berne, 044 Zurich) puis 7 chiffres pour un fixe, 07x pour un mobile (075 à 079), puis 0800 (gratuit), 084x et 090x. On écrit « 021 345 67 89 » ou « +41 79 123 45 67 ». La regex de validator.js accepte « 0 » suivi de 2 à 10 chiffres quelconques ; celle de Drupal retire les séparateurs puis ne ré-ancre pas le début ; celle de sent.dm exige un format en 4-3-2-2 que presque personne n'écrit. Voici un motif qui impose 9 chiffres et des préfixes existants, comparé à ces tentatives.

/^(?:(?:\+|00)41 ?|0)(?:(?:2[12467]|3[1-4]|4[134]|5[12568]|6[1289]|7[1-35-9]|81|91)(?:[ -]?[0-9]){7}|74[0248](?:[ -]?[0-9]){6}|800(?:[ -]?[0-9]){6}|84[0248](?:[ -]?[0-9]){6}|878(?:[ -]?[0-9]){6}|90[016](?:[ -]?[0-9]){6})$/
passe 33/33 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^(?:(?:\\+|00)41 ?|0)(?:(?:2[12467]|3[1-4]|4[134]|5[12568]|6[1289]|7[1-35-9]|81|91)(?:[ -]?[0-9]){7}|74[0248](?:[ -]?[0-9]){6}|800(?:[ -]?[0-9]){6}|84[0248](?:[ -]?[0-9]){6}|878(?:[ -]?[0-9]){6}|90[016](?:[ -]?[0-9]){6})$", "");
re.test(input);

Limites

  • Valide seulement la FORME : ne vérifie pas que le numéro est attribué. Les préfixes de 2 chiffres suivent libphonenumber ; seul le plan de l'OFCOM (RS 784.101.113/2.2), dont le texte n'a pas pu être relu ici, fait foi pour les blocs attribués.
  • Après +41 ou 0041, le 0 de tronc ne doit pas être gardé : « +41 021… » est rejeté. Le préfixe 860 (messagerie vocale, 12 chiffres) est rejeté, et les préfixes 5x sont limités à 51, 52, 55, 56 et 58.
  • La longueur de 9 chiffres après le 0 vient de libphonenumber, non du texte du plan de l'OFCOM, qui n'a pas pu être relu.
  • Une espace ou un tiret facultatifs sont acceptés entre deux chiffres quelconques ; les points, barres obliques, parenthèses et extensions sont rejetés.

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

Pages liées