Regex adresse Ethereum
Une adresse Ethereum, ce n'est pas que « 0x + 40 caractères hexadécimaux » : la norme EIP-55 encode un checksum directement dans la casse des lettres, calculé à partir d'un hash Keccak-256. Un gist GitHub illustre parfaitement la limite d'une simple regex : il compare deux adresses identiques sauf un seul caractère de casse — l'une au checksum valide, l'autre invalide — et les deux passent le même test regex de façon strictement identique. Aucune des trois tentatives comparées ici ne calcule ce checksum ; ce n'est structurellement pas possible avec une regex seule.
/^0x[a-fA-F0-9]{40}$/passe 20/20 cas
Comparatif des patterns existants
Implémentation
const re = new RegExp("^0x[a-fA-F0-9]{40}$", "");
re.test(input);Limites
- Valide seulement la FORME (0x + 40 hex) : ne calcule jamais le checksum EIP-55 (Keccak-256 de l'adresse en minuscules) — deux adresses identiques sauf un seul caractère de casse, l'une au checksum valide et l'autre non, passent ce motif de façon strictement identique.
- Une adresse tout en minuscules ou tout en majuscules est délibérément autorisée par EIP-55 lui-même (absence de checksum, rétrocompatibilité) : ce motif ne peut pas distinguer ce choix délibéré d'une simple négligence de casse.
- Ne consulte aucune blockchain : ne peut pas confirmer qu'une adresse a déjà reçu une transaction, ni qu'elle correspond à un contrat plutôt qu'à un compte détenu par une clé privée (EOA).
- Ne couvre que le format d'adresse Ethereum L1 classique : les adresses au format CAIP-10 (multi-chaînes, « eip155:1:0x… ») ou les identifiants ENS (« vitalik.eth ») suivent des formats complètement différents.