Regex ISWC (code d'œuvre musicale)
Un ISWC (ISO 15707) s'écrit « T-034.524.680-1 » : le préfixe T, neuf chiffres d'identifiant d'œuvre groupés par trois et séparés par des points, un tiret et un chiffre de contrôle modulo 10 (somme 1 + Σ i×di pour i = 1..9, puis 10 moins le reste). La forme sans séparateur « T0345246801 » est courante en stockage. Les tentatives relues sont soit tolérantes (MusicBrainz et IsoCodes acceptent des séparateurs mélangés ou absents, IsoCodes même des espaces), soit contiennent un point non échappé (music-codes : « T-034x524x680-1 » passe), soit refusent la forme sans séparateur (Wikidata, non ancrée). Voici un motif qui accepte les deux formes cohérentes, comparé à ces tentatives.
/^T(?:-[0-9]{3}\.[0-9]{3}\.[0-9]{3}-[0-9]|[0-9]{10})$/passe 28/28 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| Wikidata P1827 — forme avec séparateurs seulement (« T0345246801 » refusé), non ancrée : « xT-034.524.680-19 » passe | T-[0-9]{3}\.[0-9]{3}\.[0-9]{3}-[0-9] | 21 / 28 | sûr |
| MusicBrainz — tout séparateur facultatif et indépendant : « T034.524680-1 » et « T-034.524.680.1 » passent | ^T-?[0-9]{3}\.?[0-9]{3}\.?[0-9]{3}[-.]?[0-9]$ | 24 / 28 | sûr |
| IsoCodes (PHP) — insensible à la casse, espaces autour tolérés, séparateurs mélangés acceptés (« T.034-524.680-1 » passe) | ^\s*T[\-.]?(\d)(\d)(\d)[\-.]?(\d)(\d)(\d)[\-.]?(\d)(\d)(\d)[\-.]?(\d)\s*$ | 20 / 28 | sûr |
| music-codes (PHP), forme avec séparateurs — points non échappés : « T-034x524x680-1 » passe | ^(T)-([0-9]{3}).([0-9]{3}).([0-9]{3})-([0-9]{1})$ | 24 / 28 | sûr |
Implémentation
const re = new RegExp("^T(?:-[0-9]{3}\\.[0-9]{3}\\.[0-9]{3}-[0-9]|[0-9]{10})$", "");
re.test(input);Limites
- Valide seulement la FORME : la clé de contrôle n'est pas calculée (« T-034.524.680-2 », clé fausse, passe). Calculez 1 + Σ i×di (i = 1..9) puis 10 moins le reste modulo 10 pour la vérifier ; l'existence de l'œuvre dans la base de la CISAC ne peut pas être contrôlée par une regex.
- L'algorithme de clé vient d'un brouillon de comité ISO/TC 46/SC 9 (1999), cohérent avec la bibliothèque IsoCodes ; la norme ISO 15707 publiée est payante et n'a pas été consultée.
- Seule la forme cohérente (tout avec séparateurs ou tout sans) est acceptée ; la minuscule, les espaces et les mélanges de séparateurs sont refusés : normalisez avant validation.