Rexact
Cheatsheet

Regex ISSN

An ISSN isn't just "8 digits": ISO 3297 requires a hyphen between the two groups of 4. The widely-used npm library validator.js nonetheless makes it optional by default - and even accepts a lowercase "x" where only uppercase "X" is valid. Two other independent open-source libraries (one Finnish, one community-run) reproduce the exact same optional-hyphen flaw, proof that an error copies easily from one project to another. Here's a pattern respecting the presentation the standard actually requires, compared against these three attempts.

/^\d{4}-\d{3}[0-9X]$/
passes 22/22 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^\\d{4}-\\d{3}[0-9X]$", "");
re.test(input);

Limits

  • Valide seulement la FORME (8 chiffres avec tiret) : ne calcule pas la clé de contrôle modulo 11 — un ISSN syntaxiquement valide selon ce motif peut avoir une clé fausse et ne correspondre à aucun périodique réellement enregistré.
  • Ne consulte pas le registre du Centre International de l'ISSN (portal.issn.org) : seule une requête à ce registre confirme qu'un ISSN est réellement attribué et actif.
  • Ne distingue pas l'ISSN d'un périodique imprimé de l'ISSN-L (« linking ISSN », qui identifie une même publication à travers ses différents supports) : les deux partagent exactement la même forme, seul le registre permet de les différencier.
  • Le tiret est obligatoire dans ce motif, conformément à la présentation imposée par la norme ISO 3297 — contrairement à plusieurs bibliothèques réelles qui le rendent optionnel par erreur.