¿Qué es una expresión regular para una dirección MAC?

En este formato:

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

o:

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

El formato estándar (IEEE 802) para imprimir direcciones MAC-48 en forma amigable para el usuario es de seis grupos de dos dígitos hexadecimales, separados por guiones o dos puntos :

Asi que:

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

Un poco duro en los ojos, pero esto:

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

aplicará todos los dos puntos o todos los guiones para su notación MAC.

(Un enfoque de expresiones regulares más simple podría permitir A1:B2-C3:D4-E5:F6 , por ejemplo, que lo anterior rechaza).

delimitador: ” : “, ” “, ” .

doble o simple: 00 = 0, 0f = f

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

o

 /^([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 ... 

Esta expresión regular coincide con casi todos los formatos de mac, incluido el formato de Cisco, como 0102-0304-abcd

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

Ejemplos de cadenas que coincide:

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

¡El formato mixto también se combinará!

Tenga en cuenta que la propiedad Unicode \p{xdigit} incluye las versiones FULLWIDTH. Es posible que prefiera \p{ASCII_Hex_Digit} lugar.

La respuesta a la pregunta podría ser mejor respondida, siempre que haya instalado un venerable módulo de CPAN, escribiendo:

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

Muestro el patrón particular que arroja aquí como el patrón de suerte número 13; hay muchos otros

Este progtwig:

 #!/usr/bin/env perl use 5.010; use strict; 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 

genera esta salida:

 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 

Lo cual parece ser el tipo de cosa que estás buscando.

Este enlace puede ayudarte. Puede usar esto: (([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})

Ver esta pregunta también

Regexes de la siguiente manera:

 ^[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 versión de Python podría ser:

 re.compile(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 expresión regular anterior valida todos los tipos de direcciones mac a continuación:

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

Puede usar el siguiente procedimiento pasando la dirección MAC para la validación,

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

Gente de PHP:

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

Necesita explicación: http://regex101.com/r/wB0eT7

Si necesita espacios entre números, como esta variante

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

La expresión regular cambia a

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

para que coincida con las direcciones MAC EUI-48 de 48 bits y EUI-64 de 64 bits:

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

donde \ h es un personaje en [0-9a-fA-F]

o:

 /\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/ 

esto permite que ‘-‘ o ‘:’ o ningún separador sea utilizado

para el desarrollador de PHP

 filter_var($value, FILTER_VALIDATE_MAC) 

Quizás el más corto posible:

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

la mejor respuesta es para la validación de direcciones MAC

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