Rexact
Cheatsheet

Regex Swiss phone number

A Swiss number has 9 digits after the trunk 0 (dropped with +41): a 2-digit area code (021 Lausanne, 022 Geneva, 031 Bern, 044 Zurich) then 7 digits for a landline, 07x for a mobile (075 to 079), then 0800 (toll-free), 084x and 090x. People write '021 345 67 89' or '+41 79 123 45 67'. validator.js's regex accepts '0' followed by 2 to 10 arbitrary digits; Drupal's strips separators then does not anchor the start; sent.dm's requires a 4-3-2-2 layout that almost nobody writes. Here's a pattern enforcing 9 digits and existing prefixes, compared against those attempts.

/^(?:(?:\+|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})$/
passes 33/33 cases

Comparison of existing patterns

Implementation

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);

Limits

  • 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.

Phone numbers for other countries

Related pages