Regex numéro de carte JCB
D'après le bulletin Discover Global Network (février 2017), la plage JCB va de 3528 à 3589 avec 16 à 19 chiffres. Les tentatives relues sont plus larges ou plus étroites : regular-expressions.info accepte tout préfixe 35xxx sur 16 chiffres seulement (ainsi que les anciens 2131 et 1800 à 15 chiffres), Cleave.js et php-credit-card-validator ne testent que « 35 ». Voici un motif borné à 3528-3589 avec 16 à 19 chiffres, comparé à ces tentatives.
/^35(?:2[89]|[3-8][0-9])[0-9]{12,15}$/passe 23/23 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| regular-expressions.info — 16 chiffres seulement ; 35xxx trop large (3500 ou 3599 passent) ; accepte aussi 2131 et 1800 sur 15 chiffres | ^(?:2131|1800|35\d{3})\d{11}$ | 16 / 23 | sûr |
| Cleave.js — motif de saisie progressive sans ancre de fin : « 35 » seul et 20 chiffres passent | ^(?:35\d{0,2})\d{0,12} | 15 / 23 | sûr |
| php-credit-card-validator — seulement « commence par 35 » : toute longueur passe | ^35 | 15 / 23 | sûr |
Implémentation
const re = new RegExp("^35(?:2[89]|[3-8][0-9])[0-9]{12,15}$", "");
re.test(input);Limites
- Valide seulement la FORME (préfixe et longueur) : ni la clé de Luhn (le corpus contient un numéro de forme correcte et de clé fausse qui passe), ni l'existence du compte, ni la date d'expiration ou le CVV. Les espaces et tirets sont refusés : normalisez avant validation.
- Les anciennes plages JCB 2131/1800 (15 chiffres) sont exclues ; le bulletin signale en outre que 3528-3589 n'est activable qu'aux États-Unis par le réseau Discover. D'autres bibliothèques citent encore d'anciennes plages JCB (3088-3094, 3337-3349 notamment) : non vérifiées ici, non incluses.
- Ne stockez ni ne journalisez de vrais numéros de carte (PCI DSS) ; n'utilisez que des numéros de test dans vos tests.