Rexact
Cheatsheet

Regex IBAN

Beaucoup de regex IBAN trouvées en ligne supposent une structure tout-chiffres qui ne fonctionne que pour une poignée de pays (Allemagne, Autriche...). La plupart des IBAN européens mélangent lettres et chiffres dans leur partie nationale. Voici un motif générique conforme à la norme ISO 13616, comparé à des tentatives réelles qui échouent dès qu'on change de pays.

/^[A-Z]{2}[0-9]{2}[A-Z0-9]{11,30}$/
passe 20/20 cas

Comparatif des patterns existants

SourcepatternScore sur le corpusReDoS
Stack Overflow — tentative de l'auteur de la question (structure figée sur l'Allemagne)^[a-zA-Z]{2}[0-9]{2}[a-zA-Z0-9]{4}[0-9]{7}(?:[a-zA-Z0-9]?){0,16}$19 / 20sûr
Stack Overflow — réponse à 65 votes, portée explicitement limitée à DE/AT/FR (4 groupes de 4 chiffres)^[A-Z]{2}[0-9]{2}(?:[0-9]{4}){4}(?:[0-9]{1,2})?$11 / 20sûr
Stack Overflow — variante simplifiée de la même réponse (tout-chiffres, longueur 18-20)^[A-Z]{2}(?:[0-9]){18,20}$11 / 20sûr

Implémentation

const re = new RegExp("^[A-Z]{2}[0-9]{2}[A-Z0-9]{11,30}$", "");
re.test(input);

Limites

  • Valide seulement la forme générale, jamais la clé de contrôle (algorithme MOD 97-10 défini par ISO 7064) : une chaîne peut avoir la bonne forme et être un IBAN totalement invalide. Voir la page dédiée à l'algorithme si tu dois vérifier la clé réellement.
  • N'impose pas la longueur exacte par pays (15 à 34 caractères selon le pays, ex. toujours 22 pour l'Allemagne, toujours 27 pour la France) : une regex générique ne peut pas connaître cette table sans la dupliquer et la maintenir à jour.
  • N'exige aucun espace, mais n'en interdit pas non plus l'usage réel (les IBAN sont couramment affichés par groupes de 4) : à normaliser (retirer les espaces, mettre en majuscule) avant de tester avec ce motif.
  • Un code pays à 2 lettres syntaxiquement valide (ex. « XX ») n'est pas forcément un pays qui émet des IBAN — la liste des pays participants évolue et n'est pas du ressort d'une regex.

Pages liées