Rexact
Cheatsheet

Regex code postal suédois

Un postnummer suédois s'écrit « 111 22 » : 3 chiffres, une espace, 2 chiffres. Le pays n'est découpé qu'en 86 zones numérotées de 10 à 98, et selon une fiche de PostNord de 2017, les zones 32, 48, 49 et 99 ne sont pas utilisées. Aucune des trois tentatives réelles ne s'en préoccupe : validator.js laisse passer « 99999 », un gist accepte même « 000 00 » et un nombre quelconque d'espaces au milieu. Et le fichier GeoNames gère le préfixe « SE » à l'envers : il accepte « SE111 22 » mais rejette « SE-111 22 », la forme qu'utilise Google. Voici un motif qui exclut ces zones, comparé à ces trois tentatives.

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

Comparatif des patterns existants

Implémentation

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

Limites

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

Codes postaux d’autres pays

Pages liées