Rexact
Cheatsheet

Regex DOI (Digital Object Identifier)

Un DOI, ce n'est pas juste « 10. suivi de n'importe quoi » : Crossref, la principale agence d'enregistrement pour la littérature scientifique, publie elle-même une regex de référence — qui couvre 74,4 millions de DOI sur les 74,9 millions qu'elle observe. Un package npm assouplit le nombre de chiffres du préfixe à seulement 2 au lieu de 4 à 9, acceptant des préfixes qui n'ont jamais été attribués. Un article de blog de 2009, lui, fige le préfixe à exactement 4 chiffres — son propre auteur avoue un taux d'échec de 2,5% dès la publication, sur seulement 40 articles testés. Voici la regex que Crossref recommande elle-même, comparée à ces trois tentatives.

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

Comparatif des patterns existants

Implémentation

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

Limites

  • 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.