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
105
demandé sur Kasrâmvd 2010-11-23 23:17:01

17 réponses

Le format standard (IEEE 802) pour impression D'adresses MAC-48 dans la forme humaine-amicale est six groupes de deux chiffres hexadécimaux séparés par tirets - ou deux-points :.

Donc:

^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$
219
répondu netcoder 2015-11-06 16:47:22

Un PEU DUR sur les yeux, mais ceci:

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

Appliquera tous les deux-points ou tous les tirets pour la notation MAC.

(une approche regex plus simple pourrait permettre A1:B2-C3:D4-E5:F6, par exemple, que ce qui précède rejette.)

18
répondu pilcrow 2010-11-23 20:25:58

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 ...
6
répondu lioncub 2012-12-07 05:30:33

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 également adapté!

6
répondu Vesselin Yanev 2015-11-06 04:47:46

Soyez averti que la propriété Unicode \p{xdigit} inclut les versions pleine largeur. Vous pourriez préférer \p{ASCII_Hex_Digit} à la place.

La réponse à la question posée peut être mieux répondu-à condition que vous ayez un certain vénérable module CPAN installé-en tapant:

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

Je montre le modèle particulier qu'il produit ici {[11] } comme modèle chanceux numéro 13; Il y en a beaucoup d'autres.

Ce programme:

#!/usr/bin/env perl
use 5.010;
use strict;
use warnings qw<FATAL all>;

my $mac_rx = qr{
    ^ (?&MAC_addr) $
    (?(DEFINE)
        (?<MAC_addr>
                (?&pair) (?<it>  (?&either) )
            (?: (?&pair) \k<it> ) {4}
                (?&pair)
        )
        (?<pair>    [0-9a-f] {2} )
        (?<either>  [:\-]        )
    )
}xi;

while (<DATA>) {
    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 vous êtes à la recherche pour.

4
répondu tchrist 2017-05-23 12:18:33

Ce lien peut 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})

4
répondu Manohar Bhattarai 2016-02-28 10:26:47

Voir cette question aussi.

Regexes 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}$
2
répondu JYelton 2017-05-23 11:33:26
/(?:[A-Fa-f0-9]{2}[:-]){5}(?:[A-Fa-f0-9]{2})/
1
répondu stillstanding 2010-11-23 20:23:16

La version python pourrait être:

re.compile(r'\A(?:[\da-f]{2}[:-]){5}[\da-f]{2}\Z',re.I)
1
répondu klashxx 2014-05-02 09:58:24
/^(([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})?$/

L'expression régulière 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
1
répondu Mohammed Réda OUASSINI 2016-05-13 10:39:12

Pour le développeur PHP

filter_var($value, FILTER_VALIDATE_MAC)
1
répondu Saurabh Chandra Patel 2017-02-11 10:14:11

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

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();             
}
0
répondu Hari Babu Mandala 2014-03-14 06:23:42

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'une Explication: http://regex101.com/r/wB0eT7

0
répondu bn00d 2014-04-23 19:09:46

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

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

La regex change en

"^([0-9A-Fa-f]{2}\\s[:-]\\s){5}([0-9A-Fa-f]{2})$"
0
répondu RexSplode 2016-07-28 08:35:30

Pour faire correspondre les adresses MAC eui-48 et EUI-64 48 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

0
répondu Tilo 2016-10-10 21:30:34

Peut-être le plus court possible:

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

Update : Il existe un meilleur moyen de valider les adresses MAC en PHP qui prend en charge les adresses MAC de style trait d'Union et deux-points. Utiliser filter_var():

// Returns $macAddress, if it's a valid MAC address
filter_var($macAddress, FILTER_VALIDATE_MAC);

Comme je le sais, il prend en charge les adresses MAC sous ces formes (X: un nombre hexadécimal):

xx:xx:xx:xx:xx:xx
xx-xx-xx-xx-xx-xx
xxxx.xxxx.xxxx
0
répondu MAChitgarha 2018-09-08 10:31:29

La meilleure réponse est pour la validation d'adresse MAC regex

^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$
-4
répondu Rittika Nagar 2012-10-05 13:33:39