Regex plaque d'immatriculation portugaise
Le Portugal a eu quatre formats de plaque : AA-00-00 (jusqu'en 1992), 00-00-AA, 00-AA-00 puis, depuis mars 2020, AA-00-AA, imprimé sans tirets. Une faute de frappe dans validator.js, bibliothèque de 23 000 étoiles, a transformé une liste de séparateurs en plage de caractères : « [ -·] » va de l'espace au point médian et contient chiffres, lettres majuscules, « ! » et « @ ». Résultat testé en version 13.15.35 : « AB51234 » et « 12!AB@34 » sont acceptées comme plaques portugaises. Les deux autres tentatives réelles restent bloquées dans une époque : l'une ne connaît que AA-00-AA, l'autre que les trois anciens formats avec tirets. Voici un motif aux quatre formats, comparé à ces trois tentatives.
/^(?:[A-Z]{2}([- ]?)[0-9]{2}\1[0-9]{2}|[0-9]{2}([- ]?)[A-Z]{2}\2[0-9]{2}|[0-9]{2}([- ]?)[0-9]{2}\3[A-Z]{2}|[A-Z]{2}([- ]?)[0-9]{2}\4[A-Z]{2})$/passe 26/26 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| validator.js (pt-PT, 23 000 étoiles) — « [ -·] » est une plage (de l'espace au point médian) qui contient chiffres, lettres et symboles : « AB51234 » et « 12!AB@34 » passent (testé en 13.15.35) ; majuscules seulement | ^(([A-Z]{2}[ -·]?[0-9]{2}[ -·]?[0-9]{2})|([0-9]{2}[ -·]?[A-Z]{2}[ -·]?[0-9]{2})|([0-9]{2}[ -·]?[0-9]{2}[ -·]?[A-Z]{2})|([A-Z]{2}[ -·]?[0-9]{2}[ -·]?[A-Z]{2}))$ | 23 / 26 | sûr |
| eu-licence-validator (Go, WASM) — ne connaît que AA-00-AA : rejette AB-12-34, 12-34-AB et 12-AB-34, les plaques plus anciennes encore en circulation | ^([A-Z]{2})[-\s]?(\d{2})[-\s]?([A-Z]{2})$ | 20 / 26 | sûr |
| CodeCornTech (euro-plate-validator, trois regex réunies par |) — seulement les trois anciens formats, avec tirets obligatoires : rejette AB-12-CD et « AB12CD », la plaque actuelle imprimée sans tirets | ^(?:\d{2}-[A-Z]{2}-\d{2}|[A-Z]{2}-\d{2}-\d{2}|\d{2}-\d{2}-[A-Z]{2})$ | 20 / 26 | sûr |
Implémentation
const re = new RegExp("^(?:[A-Z]{2}([- ]?)[0-9]{2}\\1[0-9]{2}|[0-9]{2}([- ]?)[A-Z]{2}\\2[0-9]{2}|[0-9]{2}([- ]?)[0-9]{2}\\3[A-Z]{2}|[A-Z]{2}([- ]?)[0-9]{2}\\4[A-Z]{2})$", "");
re.test(input);Limites
- Valide seulement la FORME (quatre dispositions de deux lettres et de quatre chiffres) : ne vérifie pas que la plaque est attribuée par l'IMT, ni la cohérence de l'époque (« 99-ZZ-99 » est la dernière plaque de la série 00-AA-00 d'après Wikipédia). Les lettres de chaque disposition ne sont pas bornées : « KW », « YZ » (K, W et Y n'étaient pas utilisées avant 2020) passent.
- Le motif accepte le séparateur tiret, espace ou aucun, mais le même partout dans une plaque : « AB-12 CD » (séparateurs mélangés) est rejeté. Les plaques AA-00-AA sont imprimées sans tirets d'après Wikipédia : normalisez-les avant stockage.
- Les dates des formats viennent en partie de Wikipédia (source de dernier recours) : la page de l'IMT consultée ne les cite pas toutes. Les formats spéciaux (plaques d'historique, de remorque, de diplomate) ne sont pas couverts.
- Majuscules ASCII seulement : « ab-12-cd » est rejeté. Normalisez la casse avant validation si vos utilisateurs saisissent en minuscules.
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 néerlandaise (kenteken)
- plaque d'immatriculation polonaise
- plaque d'immatriculation SIV
- Toutes les plaques d’immatriculation par pays