Regex BIC / SWIFT code
Wikipedia's own ISO 9362 article, quoted verbatim in a Stack Overflow answer, gives a regex... with no start/end anchors. A blog post that walks through building a BIC regex step by step also starts from an overly permissive first draft: it allows 2 to 5 characters after the country code, when the standard allows exactly 2 or 5, never 3 or 4. Here's a pattern that fixes both points, compared against these two real attempts and a third that works correctly but rejects lowercase input - a limitation its own author acknowledges in the answer.
/^[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?$/ipasses 20/20 cases
Comparison of existing patterns
| Source | pattern | Score on the corpus | ReDoS |
|---|---|---|---|
| Wikipédia (article ISO 9362), citée telle quelle dans une réponse Stack Overflow, sans ancrage début/fin de chaîne | [A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})? | 16 / 20 | safe |
| John D. Cook (blog) — premier brouillon documenté comme trop permissif (2 à 5 caractères au lieu d'exactement 2 ou 5), également non ancré | [A-Z]{6}[A-Z0-9]{2,5} | 14 / 20 | safe |
| Stack Overflow — réponse à 40 votes de Mark Byers telle que postée, majuscules uniquement (limite reconnue par l'auteur lui-même dans sa réponse) | ^[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?$ | 18 / 20 | safe |
Implementation
const re = new RegExp("^[A-Z]{6}[A-Z0-9]{2}(?:[A-Z0-9]{3})?$", "i");
re.test(input);Limits
- Ne vérifie que la forme : ne consulte aucun registre SWIFT, ne garantit ni qu'une banque porte réellement ce code, ni que le code pays (positions 5-6) correspond à un pays ISO 3166-1 existant.
- N'interprète pas la signification du second caractère du code de localisation (0 = BIC de test, 1 = participant passif, 2 = facturation inversée) : ce sont des conventions documentées par la norme, pas des contraintes de forme.
- Le code branche de 3 caractères, quand il est absent, sous-entend le siège principal (« XXX » implicite) : ce motif accepte aussi bien la forme à 8 caractères que la forme à 11 explicitement terminée par « XXX », sans les distinguer.
- N'exclut pas les combinaisons de code pays théoriquement inutilisées (par exemple un code qui ne correspond à aucun pays ISO 3166-1 ni à l'exception « XK » du Kosovo) : seule la forme (2 lettres) est vérifiée, pas la liste réelle des codes valides.