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…