Regex plaque d'immatriculation néerlandaise (kenteken)
Le Rijksdienst voor het Wegverkeer (RDW) définit 14 séries de plaques, de XX-99-99 (1951) à XXX-99-X (2024). Depuis la série 4, les voyelles, le C et le Q ne sont plus utilisés, et des combinaisons comme SS, SD, NSB, PVV ou BBB sont exclues. Les tentatives réelles l'ignorent presque toutes : un gem Ruby accepte n'importe quelles lettres et un module Go ne connaît que trois formats sur quatorze, refusant par exemple GH-12-JK (la série des remorques). Voici un motif aux 14 séries, avec les lettres de la plaque moderne et la liste des combinaisons exclues, comparé à ces trois tentatives.
/^(?:[A-Z]{2}-[0-9]{2}-[0-9]{2}|[0-9]{2}-[0-9]{2}-[A-Z]{2}|[0-9]{2}-[A-Z]{2}-[0-9]{2}|(?!.*(?:GVD|KKK|NSB|PKK|PSV|TBS|PVV|SGP|VVD|FVD|BBB|SS|SD))(?:[BDFGHJKLMNPRSTVWXZ]{2}-[0-9]{2}-[BDFGHJKLMNPRSTVWXZ]{2}|[BDFGHJKLMNPRSTVWXZ]{2}-[BDFGHJKLMNPRSTVWXZ]{2}-[0-9]{2}|[0-9]{2}-[BDFGHJKLMNPRSTVWXZ]{2}-[BDFGHJKLMNPRSTVWXZ]{2}|[0-9]{2}-[BDFGHJKLMNPRSTVWXZ]{3}-[0-9]|[0-9]-[BDFGHJKLMNPRSTVWXZ]{3}-[0-9]{2}|[BDFGHJKLMNPRSTVWXZ]{2}-[0-9]{3}-[BDFGHJKLMNPRSTVWXZ]|[BDFGHJKLMNPRSTVWXZ]-[0-9]{3}-[BDFGHJKLMNPRSTVWXZ]{2}|[BDFGHJKLMNPRSTVWXZ]{3}-[0-9]{2}-[BDFGHJKLMNPRSTVWXZ]|[BDFGHJKLMNPRSTVWXZ]-[0-9]{2}-[BDFGHJKLMNPRSTVWXZ]{3}|[0-9]-[BDFGHJKLMNPRSTVWXZ]{2}-[0-9]{3}|[0-9]{3}-[BDFGHJKLMNPRSTVWXZ]{2}-[0-9]))$/passe 33/33 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| ariejan/license_plate_validator (gem Ruby) — 14 formats mais « [a-zA-Z] » partout : voyelles, C, Q et combinaisons interdites (SS, NSB, PVV, BBB) passent ; tirets facultatifs | ^([a-zA-Z]{2})-?([0-9]{2})-?([0-9]{2})$|^([0-9]{2})-?([0-9]{2})-?([a-zA-Z]{2})$|^([0-9]{2})-?([a-zA-Z]{2})-?([0-9]{2})$|^([a-zA-Z]{2})-?([0-9]{2})-?([a-zA-Z]{2})$|^([a-zA-Z]{2})-?([a-zA-Z]{2})-?([0-9]{2})$|^([0-9]{2})-?([a-zA-Z]{2})-?([a-zA-Z]{2})$|^([0-9]{2})-?([a-zA-Z]{3})-?([0-9]{1})$|^([0-9]{1})-?([a-zA-Z]{3})-?([0-9]{2})$|^([a-zA-Z]{2})-?([0-9]{3})-?([a-zA-Z]{1})$|^([a-zA-Z]{1})-?([0-9]{3})-?([a-zA-Z]{2})$|^([a-zA-Z]{3})-?([0-9]{2})-?([a-zA-Z])$|^([0-9]{3})-?([a-zA-Z]{2})-?([0-9])$|^([a-zA-Z])-?([0-9]{2})-?([a-zA-Z]{3})$|^([0-9])-?([a-zA-Z]{2})-?([0-9]{3})$ | 25 / 33 | sûr |
| eu-licence-validator (Go, WASM) — trois formats seulement : rejette GH-12-JK (série 4), BD-JK-12 (série 5), 5-KLN-67 (série 8), GH-123-J (série 9)… | ^([A-Z]{2})[-\s]?(\d{2})[-\s]?(\d{2})$|^(\d{2})[-\s]?([A-Z]{2})[-\s]?(\d{2})$|^(\d{1,2})[-\s]?([A-Z]{3})[-\s]?(\d)$ | 21 / 33 | sûr |
| CodeCornTech (euro-plate-validator, neuf regex réunies par |) — lettres sans M ni W mais avec Y : la plaque de remorque WB-12-DF est rejetée ; ni XX-99-XX ni 99-99-XX ; combinaisons interdites non contrôlées | ^[BDFGHJKLNPRSTVXYZ]{2}-\d{3}-[BDFGHJKLNPRSTVXYZ]{2}$|^\d{2}-[BDFGHJKLNPRSTVXYZ]{3}-\d$|^\d-[BDFGHJKLNPRSTVXYZ]{3}-\d{2}$|^[BDFGHJKLNPRSTVXYZ]{2}-[BDFGHJKLNPRSTVXYZ]{2}-\d{2}$|^\d{2}-[BDFGHJKLNPRSTVXYZ]{2}-[BDFGHJKLNPRSTVXYZ]{2}$|^[BDFGHJKLNPRSTVXYZ]{3}-\d{2}-[BDFGHJKLNPRSTVXYZ]$|^[BDFGHJKLNPRSTVXYZ]-\d{3}-[BDFGHJKLNPRSTVXYZ]{2}$|^[BDFGHJKLNPRSTVXYZ]{2}-\d{3}-[BDFGHJKLNPRSTVXYZ]$|^\d-[BDFGHJKLNPRSTVXYZ]{2}-\d{3}$ | 22 / 33 | sûr |
Implémentation
const re = new RegExp("^(?:[A-Z]{2}-[0-9]{2}-[0-9]{2}|[0-9]{2}-[0-9]{2}-[A-Z]{2}|[0-9]{2}-[A-Z]{2}-[0-9]{2}|(?!.*(?:GVD|KKK|NSB|PKK|PSV|TBS|PVV|SGP|VVD|FVD|BBB|SS|SD))(?:[BDFGHJKLMNPRSTVWXZ]{2}-[0-9]{2}-[BDFGHJKLMNPRSTVWXZ]{2}|[BDFGHJKLMNPRSTVWXZ]{2}-[BDFGHJKLMNPRSTVWXZ]{2}-[0-9]{2}|[0-9]{2}-[BDFGHJKLMNPRSTVWXZ]{2}-[BDFGHJKLMNPRSTVWXZ]{2}|[0-9]{2}-[BDFGHJKLMNPRSTVWXZ]{3}-[0-9]|[0-9]-[BDFGHJKLMNPRSTVWXZ]{3}-[0-9]{2}|[BDFGHJKLMNPRSTVWXZ]{2}-[0-9]{3}-[BDFGHJKLMNPRSTVWXZ]|[BDFGHJKLMNPRSTVWXZ]-[0-9]{3}-[BDFGHJKLMNPRSTVWXZ]{2}|[BDFGHJKLMNPRSTVWXZ]{3}-[0-9]{2}-[BDFGHJKLMNPRSTVWXZ]|[BDFGHJKLMNPRSTVWXZ]-[0-9]{2}-[BDFGHJKLMNPRSTVWXZ]{3}|[0-9]-[BDFGHJKLMNPRSTVWXZ]{2}-[0-9]{3}|[0-9]{3}-[BDFGHJKLMNPRSTVWXZ]{2}-[0-9]))$", "");
re.test(input);Limites
- Valide seulement la FORME : ne vérifie pas que la plaque est attribuée par le RDW. Les séries 1 à 3 (1951 à 1988) acceptent toutes les lettres, y compris les voyelles, ce qui est historiquement correct mais laisse passer « SS-12-34 » (la liste des combinaisons exclues n'est appliquée qu'aux séries 4 et suivantes, faute de source sur leur application aux anciennes plaques).
- Les lettres autorisées (sans voyelles, C, Q ni Y) valent pour toutes les séries modernes : le RDW précise des premières lettres par catégorie de véhicule (M pour les motos, V pour les utilitaires légers, B pour les poids lourds, W pour les remorques…) que ce motif n'encode pas. Le statut de la lettre Y n'a pas pu être confirmé auprès du RDW.
- Exige les tirets, comme les plaques officielles : « GH12JK » est rejeté. Les séries spéciales (BN, GN, CD, CDJ, GV) ne sont pas couvertes.
- Les dates de chaque série viennent de la page du RDW consultée ; elle a pu être mise à jour depuis. Majuscules ASCII seulement : « gh-12-jk » est rejeté.
Plaques d’immatriculation d’autres pays
- plaque d'immatriculation allemande
- plaque d'immatriculation belge
- plaque d'immatriculation britannique (format actuel)
- plaque d'immatriculation espagnole (format actuel)
- plaque d'immatriculation italienne
- plaque d'immatriculation polonaise
- plaque d'immatriculation portugaise
- plaque d'immatriculation SIV
- Toutes les plaques d’immatriculation par pays