Regex Spanish licence plate (current format)
Since September 2000, a Spanish plate is written 0000 BCD: 4 digits from 0000 to 9999 and 3 consonants, from BBB to ZZZ. The General Vehicle Regulation (Annex XVIII) removes 'the five vowels and the letters Ñ and Q'. Real attempts go wrong in three ways: a PHP project accepts any letter, so '1234 ABC' and '1234 BCQ' pass; the npm package spanish-car-plate normalizes its input with '[^A-Z0-9]*', which accepts any separator; and CodeCornTech's regex is right, but not for older formats. Here's a strict pattern, compared against those attempts.
/^[0-9]{4} ?[BCDFGHJKLMNPRSTVWXYZ]{3}$/passes 22/22 cases
Comparison of existing patterns
| Source | pattern | Score on the corpus | ReDoS |
|---|---|---|---|
| dossierdata/license-plate (PHP) — « [a-zA-Z]{3} » : voyelles et Q passent (« 1234 ABC », « 1234 BCQ ») ; minuscules acceptées ; préfixes d'anciens formats optionnels dans la version complète | ^([\d]{4})([a-zA-Z]{3})$ | 16 / 22 | safe |
| spanish-car-plate (npm) — la regex finale est juste (consonnes, drapeau i) mais la normalisation d'entrée « [^A-Z0-9]* » accepte n'importe quel séparateur (« 1234###BCD ») et les minuscules ; ici : la regex finale seule, sans espace | ^[0-9]{4}[BCDFGHJKLMNPRSTVWXYZ]{3}$ | 16 / 22 | safe |
| CodeCornTech (euro-plate-validator) — juste pour le format actuel (consonnes, espace facultatif) ; ni E/R/C pour les véhicules spéciaux ni les formats antérieurs à 2000 | ^\d{4}\s?[BCDFGHJKLMNPRSTVWXYZ]{3}$ | 22 / 22 | safe |
Implementation
const re = new RegExp("^[0-9]{4} ?[BCDFGHJKLMNPRSTVWXYZ]{3}$", "");
re.test(input);Limits
- Valide seulement la FORME du format courant (depuis 2000) : ne vérifie pas que la plaque est attribuée par la DGT. Le BOE ne retire que les cinq voyelles, Ñ et Q (et les digrammes CH et LL) : des combinaisons de consonnes comme « CCH » restent légales et passent.
- Les plaques spéciales (préfixe E pour les véhicules spéciaux, R pour les remorques, C pour les cyclomoteurs) décrites par le BOE et les formats provinciaux d'avant 2000 (« M-1234-AB », « M-960.985 ») ne sont pas couverts : ils sont rejetés.
- L'espace entre les chiffres et les lettres est facultatif ; la plaque officielle a une espace. Majuscules ASCII seulement : « 1234 bcd » est rejeté.
- Aucune plage fictive officielle n'existe pour l'Espagne ; les exemples du corpus sont construits à partir de la règle du BOE (0000 BBB et 9999 ZZZ sont les bornes citées par le texte).