Rexact
Cheatsheet

Regex numéro CAS

Un numéro CAS, ce n'est pas juste « des chiffres séparés par des tirets » : le CAS (Chemical Abstracts Service) impose lui-même un premier groupe de 2 à 7 chiffres, jamais 1 seul. Une fonction PL/SQL réelle et une bibliothèque Python l'un comme l'autre acceptent pourtant un premier groupe d'un seul chiffre — un numéro comme « 5-00-0 » passerait leur test de forme, alors que le CAS ne l'attribuerait jamais. Voici un motif qui respecte cette borne officielle, comparé à ces deux tentatives et une troisième dépourvue de tout ancrage.

/^[0-9]{2,7}-[0-9]{2}-[0-9]$/
passe 20/20 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^[0-9]{2,7}-[0-9]{2}-[0-9]$", "");
re.test(input);

Limites

  • Valide seulement la FORME (groupes de 2-7, 2 et 1 chiffres) : ne calcule pas le chiffre de contrôle (somme pondérée modulo 10) — un numéro syntaxiquement valide selon ce motif peut avoir une clé fausse et ne correspondre à aucune substance réellement enregistrée (voir 7732-18-4 dans les exemples, structure de l'eau mais clé fausse).
  • Ne consulte pas le registre CAS (SciFinder ou CAS Common Chemistry, common-chemistry.cas.org) : seule cette source confirme qu'un numéro est réellement attribué à une substance.
  • Un numéro CAS n'est qu'un identifiant administratif d'enregistrement, jamais réattribué même si la substance est retirée du commerce : ce motif ne peut refléter aucune notion de statut réglementaire actuel (interdiction, restriction).
  • Exige des tirets littéraux aux deux positions : les formats sans séparateur ou avec des points, parfois rencontrés dans des bases de données mal normalisées, doivent être convertis avant validation par ce motif.