Rexact
Cheatsheet

Regex CAS Registry Number

A CAS number isn't just "digits separated by hyphens": CAS (Chemical Abstracts Service) itself requires a first group of 2 to 7 digits, never just 1. A real PL/SQL function and a Python library both nonetheless accept a single-digit first group - a number like "5-00-0" would pass their shape check, even though CAS would never actually assign it. Here's a pattern respecting that official bound, compared against those two attempts and a third with no anchoring at all.

/^[0-9]{2,7}-[0-9]{2}-[0-9]$/
passes 20/20 cases

Comparison of existing patterns

Implementation

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

Limits

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