Rexact
Cheatsheet

Regex Swedish postal code

A Swedish postnummer is written '111 22': 3 digits, a space, 2 digits. The country is split into only 86 areas numbered 10 to 98, and according to a 2017 PostNord fact sheet, areas 32, 48, 49 and 99 are unused. None of the three real attempts cares: validator.js lets '99999' through, and a gist even accepts '000 00' and any number of spaces in the middle. And the GeoNames file handles the 'SE' prefix backwards: it accepts 'SE111 22' but rejects 'SE-111 22', the form Google uses. Here's a pattern excluding those areas, compared against those three attempts.

/^(?:SE-)?(?!32|48|49|99)[1-9][0-9]{2} ?[0-9]{2}$/
passes 23/23 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^(?:SE-)?(?!32|48|49|99)[1-9][0-9]{2} ?[0-9]{2}$", "");
re.test(input);

Limits

  • Valide seulement la FORME (5 chiffres, espace facultative après le troisième, zone de 10 à 98) : ne vérifie pas qu'un postnummer précis est réellement attribué. PostNord marque même certains codes d'une zone active comme « Används ej » (non utilisés), par exemple 400 00.
  • Exclut les zones 32, 48, 49 et 99 d'après la fiche PostNord de 2017 : si PostNord en attribue une plus tard, ce motif la rejettera à tort. À revérifier avant de dépendre de cette exclusion sur un produit à long terme.
  • Le préfixe facultatif « SE- » est documenté par Google (champ postprefix) et python-stdnum, pas par la fiche PostNord elle-même, qui ne mentionne que la forme « 111 22 » : traitez-le comme une tolérance de saisie plutôt qu'une règle officielle.
  • Ne tolère qu'une seule espace, ou aucune : « 111 22 » (deux espaces) ou une tabulation sont rejetés, contrairement à plusieurs tentatives comparées ici. Normalisez la saisie avant validation si vos utilisateurs collent du texte.

Postal codes for other countries

Related pages