User avatar
Océane @oceane@peculiar.florist
1y
Je décompose le regex des DOI Honnêtement cette expression est facile à lire:

/^10\.[1-9][0-9]{3,}(\.[0-9]+)
(\/[^\u0000-\u001F\u007F-\u009F])?$/

Bon on décompose:

/10\.[1-9][0-9]{3,}

Ça commence par dix point un chiffre entre 1 et 9, suivi d'au moins trois chiffres entre zéro et neuf.

(\.[0-9]+)*

Point suivi d'au moins un chiffre entre zéro et neuf. L'astérisque indique que c'est optionnel.

(\/[\u0000-u001F\u007F-\u009F]*)?$/

Ça a l'air chonky comme ça mais ça veut
grosso modo dire que tous les caractères sur les plages Unicode 0000-001F et 007F-009F sont autorisés (dans n'importe quel ordre). Les caractères de la plage Unicode entre crochets sont optionnels (*), et le DOI est valide qu'il y ait le groupe slash Unicode ou non (`?`). L'ajout de caractères hors de cette séquence est invalide car le $ marque la fin du regex (sinon on pourrait mettre ce qu'on voudrait et rigolez pas, c'est déjà arrivé (*tousse* Tchap *tousse*))

Je reformule: le regex finit par un groupe optionnel composé d'un slash puis d'une séquence Unicode, ou alors d'un slash tout court.

Je comprends que ça ait été fastidieux à écrire, mais ce n'est vraiment pas impressionnant à la lecture si on connaît le sens des signes et qu'on sait comment le décomposer en petit blocs. Il faut juste prendre le temps…
1
0
2
0
1