Regex SIV license plate
A developer had a working PCRE regex, but it used conditional syntax that doesn't exist in JavaScript — impossible to compile as written. The two Stack Overflow answers they got each have their own flaw: one forgets to exclude the "WW" combination on the second letter group. Here's a pattern that fixes that specific point, compared against the 3 real attempts.
/^(?!SS|WW)[A-HJ-NP-TV-Z]{2}[- ]?\d{3}[- ]?(?!SS|WW)[A-HJ-NP-TV-Z]{2}$/ipasses 20/20 cases
Comparison of existing patterns
| Source | pattern | Score on the corpus | ReDoS |
|---|---|---|---|
| Stack Overflow — regex PCRE d'origine de l'auteur, syntaxe conditionnelle absente de JS | ^(?(?!ss|ww)[a-hj-np-tv-z]{2})(?:\s|-)?[0-9]{3}(?:\s|-)?(?(?!ss)[a-hj-np-tv-z]{2})$ | does not compile | — |
| Stack Overflow — réponse de VisioN, 3 votes, « WW » non exclu sur le second groupe | ^(?!ss|ww)[a-hj-np-tv-z]{2}[ -]?[0-9]{3}[ -]?(?!ss)[a-hj-np-tv-z]{2}$ | 19 / 20 | safe |
| Stack Overflow — réponse de Qwertiy, approche différente (lettres génériques + exclusion par lookahead) | ^(?!ss|ww|.[iou]|[iou].)[a-z]{2}[-\s]?\d{3}[-\s]?(?!ss|ww|.[iou]|[iou].)[a-z]{2}$ | 20 / 20 | safe |
Implementation
const re = new RegExp("^(?!SS|WW)[A-HJ-NP-TV-Z]{2}[- ]?\\d{3}[- ]?(?!SS|WW)[A-HJ-NP-TV-Z]{2}$", "i");
re.test(input);Limits
- Ne couvre que le format SIV (en vigueur depuis 2009) : les plaques FNI antérieures (ex. « 1234 AB 56 », avec le numéro de département) restent légalement valides sur les véhicules non ré-immatriculés et suivent une structure entièrement différente.
- Ne vérifie plus aucun département : depuis 2009, le numéro SIV lui-même ne code plus la région, contrairement à l'ancien format — l'autocollant régional visible sur la plaque est un choix esthétique du propriétaire, pas une donnée du numéro.
- Les combinaisons « SS » et « WW » sont exclues par convention administrative actuelle : une regex figée ne s'adapte pas automatiquement si cette règle change à l'avenir.
- Une plaque syntaxiquement valide n'est pas forcément une plaque réellement attribuée par l'ANTS : la forme ne prouve pas l'existence ni la conformité au fichier des immatriculations.