Qu’est-ce qu’une expression régulière pour une adresse MAC?

Dans ce format:

3D:F2:C9:A6:B3:4F 

ou:

 3D-F2-C9-A6-B3-4F 

Le format standard (IEEE 802) pour imprimer les adresses MAC-48 sous une forme conviviale est constitué de six groupes de deux chiffres hexadécimaux, séparés par des tirets ou des deux-points:.

Alors:

 ^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$ 

Un peu dur sur les yeux, mais ceci:

 /^(?:[[:xdigit:]]{2}([-:]))(?:[[:xdigit:]]{2}\1){4}[[:xdigit:]]{2}$/ 

imposera soit tous les deux-points ou tous les tirets pour votre notation MAC.

(Une approche regex plus simple pourrait autoriser A1:B2-C3:D4-E5:F6 , par exemple, ce que rejette ci-dessus.)

délimiteur: ” : “, ” “, ” .

double ou simple: 00 = 0, 0f = f

 /^([0-9a-f]{1,2}[\.:-]){5}([0-9a-f]{1,2})$/i 

ou

 /^([0-9a-F]{1,2}[\.:-]){5}([0-9a-F]{1,2})$/ 

 exm: 00:27:0e:2a:b9:aa, 00-27-0E-2A-B9-AA, 0.27.e.2a.b9.aa ... 

Cette regex correspond à peu près à tous les formats Mac, y compris le format Cisco, tels que 0102-0304-abcd

 ^([[:xdigit:]]{2}[:.-]?){5}[[:xdigit:]]{2}$ 

Exemple de chaînes auxquelles il correspond:

 01:02:03:04:ab:cd 01-02-03-04-ab-cd 01.02.03.04.ab.cd 0102-0304-abcd 01020304abcd 

Le format mixte sera égalé aussi!

Soyez averti que la propriété Unicode \p{xdigit} inclut les versions FULLWIDTH. Vous préférerez peut-être \p{ASCII_Hex_Digit} place.

La réponse à la question posée pourrait être la meilleure réponse – à condition que vous ayez un certain module vénérable CPAN installé – en tapant:

 % perl -MRegexp::Common -lE 'say $RE{net}{MAC}' 

Je montre le motif particulier qu’il produit ici en tant que numéro de modèle chanceux 13; il y en a beaucoup d’autres.

Ce programme:

 #!/usr/bin/env perl use 5.010; use ssortingct; use warnings qw; my $mac_rx = qr{ ^ (?&MAC_addr) $ (?(DEFINE) (? (?&pair) (? (?&either) ) (?: (?&pair) \k ) {4} (?&pair) ) (? [0-9a-f] {2} ) (? [:\-] ) ) }xi; while () { chomp; printf("%-25s %s\n", $_ => /$mac_rx/ ? "ok" : "not ok"); } __END__ 3D:F2:C9:A6:B3:4F 3D:F2:AC9:A6:B3:4F 3D:F2:C9:A6:B3:4F:00 :F2:C9:A6:B3:4F F2:C9:A6:B3:4F 3d:f2:c9:a6:b3:4f 3D-F2-C9-A6-B3-4F 3D-F2:C9-A6:B3-4F 

génère cette sortie:

 3D:F2:C9:A6:B3:4F ok 3D:F2:AC9:A6:B3:4F not ok 3D:F2:C9:A6:B3:4F:00 not ok :F2:C9:A6:B3:4F not ok F2:C9:A6:B3:4F not ok 3d:f2:c9:a6:b3:4f ok 3D-F2-C9-A6-B3-4F ok 3D-F2:C9-A6:B3-4F not ok 

Ce qui semble être le genre de chose que vous recherchez.

Ce lien pourrait vous aider. Vous pouvez utiliser ceci: (([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})

Voir cette question aussi.

Exprimez comme suit:

 ^[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}:[0-9A-F]{2}$ ^[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}-[0-9A-F]{2}$ 
 /(?:[A-Fa-f0-9]{2}[:-]){5}(?:[A-Fa-f0-9]{2})/ 

La version de python pourrait être:

 re.comstack(r'\A(?:[\da-f]{2}[:-]){5}[\da-f]{2}\Z',re.I) 
 /^(([a-fA-F0-9]{2}-){5}[a-fA-F0-9]{2}|([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}|([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})?$/ 

La regex ci-dessus valide tous les types d’adresses mac ci-dessous:

 01-23-45-67-89-ab 01:23:45:67:89:ab 0123.4567.89ab 

Vous pouvez utiliser la procédure suivante en passant l’adresse mac pour la validation,

 private static final Ssortingng MAC_PATTERN = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"; private boolean validateMAC(final Ssortingng mac){ Pattern pattern = Pattern.comstack(MAC_PATTERN); Matcher matcher = pattern.matcher(mac); return matcher.matches(); } 

Les gens de PHP:

 print_r(preg_match('/^(?:[0-9A-F]{2}[:]?){5}(?:[0-9A-F]{2}?)$/i', '00:25:90:8C:B8:59')); 

Besoin d’explication: http://regex101.com/r/wB0eT7

Si vous avez besoin d’espaces entre les nombres, comme cette variante

 3D : F2 : C9 : A6 : B3 : 4F 

La regex change à

 "^([0-9A-Fa-f]{2}\\s[:-]\\s){5}([0-9A-Fa-f]{2})$" 

pour correspondre à la fois aux adresses MAC EUI-48 de 48 bits et EUI-64 de 64 bits:

 /\A\h{2}([:\-]?\h{2}){5}\z|\A\h{2}([:\-]?\h{2}){7}\z/ 

où \ h est un caractère dans [0-9a-fA-F]

ou:

 /\A[0-9a-fA-F]{2}([:\-]?[0-9a-fA-F]{2}){5}\z|\A[0-9a-fA-F]{2}([:\-]?[0-9a-fA-F]{2}){7}\z/ 

cela permet d’utiliser ‘-‘ ou ‘:’ ou aucun séparateur à utiliser

pour développeur PHP

 filter_var($value, FILTER_VALIDATE_MAC) 

Peut-être le plus court possible:

 /([\da-f]{2}[:-]){5}[\da-f]{2}/i 

la meilleure réponse est pour regex de validation d’adresse mac

 ^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$