Rexact
Cheatsheet

Regex Swedish phone number

PTS's Swedish plan has 264 area codes; 0 is the trunk prefix and disappears with +46. A number has 7 to 9 digits after the 0: '08-123 456 78' (Stockholm), '031-123 456' (Gothenburg), '070-123 45 67' (mobile, always 9 digits). The real attempts I read are limited to mobiles: validator.js's regex refuses 078, sent.dm's assumes spaces and hyphens were stripped and accepts 077 (shared-cost), and Drupal's requires a precise layout with the hyphen and spaces. Here's a pattern covering landlines and mobiles, compared against those attempts.

/^(?:(?:\+|00)46[ -]?|0)(?:7[02-9](?:[ -]?[0-9]){7}|[1-689](?:[ -]?[0-9]){6,8})$/
passes 35/35 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^(?:(?:\\+|00)46[ -]?|0)(?:7[02-9](?:[ -]?[0-9]){7}|[1-689](?:[ -]?[0-9]){6,8})$", "");
re.test(input);

Limits

  • Valide seulement la FORME : ne vérifie pas que le numéro est attribué ni que l'indicatif de zone existe : tout premier chiffre 1-6, 8 ou 9 passe, alors que le plan de PTS liste 264 indicatifs.
  • Les mobiles sont acceptés pour 070, 072 à 079 (9 chiffres) ; PTS les classe comme mobiles pour 070, 072, 073, 076, 078 et 079, tandis que 074 (radiomessagerie), 075 (personnel) et 077 (partagé) passent aussi ici. Le 071 (haut débit mobile, 13 chiffres) est rejeté.
  • Après +46 ou 0046, le 0 de tronc ne doit pas être gardé : « +46 070… » est rejeté. Un tiret ou une espace facultatifs sont acceptés entre deux chiffres quelconques ; parenthèses, points et extensions sont rejetés.
  • Les numéros de routage et de messagerie vocale (jusqu'à 13 chiffres, comme 025x) et les codes courts (90 XYZ, 112, 113 13, 116 XYZ…) ne sont pas acceptés.

Phone numbers for other countries

Related pages