Rexact
Cheatsheet

Regex DOI (Digital Object Identifier)

A DOI isn't just "10. followed by anything": Crossref, the leading registration agency for scientific literature, itself publishes a reference regex - one that covers 74.4 million of the 74.9 million DOIs it observes. An npm package loosens the prefix's digit count to as few as 2 instead of 4-9, accepting prefixes that were never actually assigned. A 2009 blog post freezes the prefix at exactly 4 digits - its own author admits a 2.5% failure rate right at publication, on just 40 tested articles. Here's the regex Crossref itself recommends, compared against these three attempts.

/^10\.\d{4,9}/[-._;()/:A-Z0-9]+$/i
passes 20/20 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^10\\.\\d{4,9}/[-._;()/:A-Z0-9]+$", "i");
re.test(input);

Limits

  • Valide seulement la FORME (préfixe 10.NNNN-NNNNNNNNN + suffixe) : ne consulte pas l'API officielle de résolution (doi.org/api/handles/) qui seule confirme qu'un DOI est réellement enregistré et actif.
  • Par la propre estimation de Crossref, ce motif couvre 74,4 des 74,9 millions de DOI observés (environ 99,3%) : certains DOI historiques antérieurs à des conventions plus strictes, ainsi qu'un sous-ensemble notable du registrant Wiley (préfixe 10.1002), peuvent y échapper — Crossref propose un second motif complémentaire spécifique à ce cas.
  • Capture parfois de la ponctuation de phrase collée au DOI lors d'une extraction depuis du texte libre (un point final, des deux-points) : Crossref le signale lui-même comme limite connue de son propre motif recommandé.
  • Le suffixe peut en théorie contenir presque n'importe quel caractère Unicode imprimable et n'a aucune longueur maximale définie par la norme : ce motif se limite à la classe de caractères la plus courante en pratique, sans prétendre couvrir 100% des suffixes valides possibles.