Rexact
Cheatsheet

Regex adresse MAC

La réponse la plus votée sur Stack Overflow (346 votes) a un vrai défaut signalé en commentaire : elle accepte « 3D-F2-C9:A6-B3:4F », un mélange de tirets et de deux-points dans la même adresse, ce qui n'a aucun sens. Une autre réponse du même fil ne compile même pas en JavaScript (plage de caractères invalide dans une classe). Voici un motif qui impose un séparateur cohérent sur toute l'adresse, comparé à ces deux tentatives et à une troisième qui accepte des séparateurs incohérents groupe par groupe.

/^(?:[0-9A-Fa-f]{2}([:-]))(?:[0-9A-Fa-f]{2}\1){4}[0-9A-Fa-f]{2}$/
passe 20/20 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^(?:[0-9A-Fa-f]{2}([:-]))(?:[0-9A-Fa-f]{2}\\1){4}[0-9A-Fa-f]{2}$", "");
re.test(input);

Limites

  • N'accepte que le format standard IEEE 802 en 6 groupes de 2 chiffres hexadécimaux séparés par « : » ou « - » : ni la notation Cisco par points tous les 4 chiffres (« 0102.0304.abcd »), ni la forme sans séparateur (« 3DF2C9A6B34F »), pourtant réellement rencontrées, ne sont couvertes.
  • N'accepte pas les groupes à un seul chiffre (« 3D:F2:C9:A6:B3:4 » pour un octet inférieur à 0x10) que certains outils Unix produisent en supprimant le zéro de tête — un vrai comportement documenté dans les commentaires du fil source.
  • Valide uniquement la FORME : ne vérifie pas que l'adresse correspond à un préfixe OUI (les 3 premiers octets) réellement attribué par l'IEEE à un fabricant.
  • Ne distingue pas les adresses réservées (diffusion FF:FF:FF:FF:FF:FF, multicast, ou l'adresse nulle 00:00:00:00:00:00) : elles sont syntaxiquement valides mais ne désignent pas une interface réseau individuelle.