Что такое регулярное выражение для MAC-адреса?



в следующем формате:



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


или:



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

17 ответов:

стандартный формат (IEEE 802) для печать MAC-48 адресов внутри форма человека-это шесть групп две шестнадцатеричные цифры, разделенные дефисы - или двоеточие :.

так:

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

немного тяжело на глаза, но это:

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

будет применять либо все двоеточия или все тире для вашего Mac нотации.

(более простой подход регулярных выражений может позволить A1:B2-C3:D4-E5:F6, например, который выше отвергает.)

разделитель: ":"," -","."

двойной или одиночный: 00 = 0, 0f = f

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

или

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

это регулярное выражение соответствует почти каждому формату mac, включая формат Cisco, такой как 0102-0304-abcd

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

пример строк, которым он соответствует:

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

смешанный формат будет соответствовать также!

имейте в виду, что свойство Unicode \p{xdigit} включает в себя ПОЛНОШИРИННЫЕ версии. Вы можете предпочесть .

ответ на заданный вопрос может быть наилучшим ответом - при условии, что у вас установлен определенный почтенный модуль CPAN-набрав:

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

я показываю конкретный шаблон, который он выводит здесь как счастливая модель номер 13; есть много других.

программы:

#!/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

создает это вывод:

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

что, похоже, то, что вы ищете.

этой ссылке может помочь вам. Вы можете использовать это : (([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})

посмотреть этот вопрос также.

Regexes следующим образом:

^[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})/

версия python может быть:

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})?$/

регулярное выражение выше проверяет все типы mac-адресов ниже:

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

для PHP разработчика

filter_var($value, FILTER_VALIDATE_MAC)

вы можете использовать следующую процедуру, передавая mac-адрес для проверки,

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();             
}

PHP Folks:

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

нужно пояснение:http://regex101.com/r/wB0eT7

Если вам нужны пробелы между числами, как этот вариант

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

регулярное выражение изменения до

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

чтобы соответствовать как 48-битным EUI-48, так и 64-битным EUI-64 MAC-адресам:

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

где \h-символ в [0-9a-fA-F]

или:

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

это позволяет использовать ' - 'или': 'или без разделителя

возможно, самый короткий:

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

обновление: существует лучший способ проверки MAC-адресов в PHP, который поддерживает как дефисные, так и двоеточные MAC-адреса. Используйте filter_var ():

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

как я знаю, он поддерживает MAC-адреса в этих формах (x: шестнадцатеричное число):

xx:xx:xx:xx:xx:xx
xx-xx-xx-xx-xx-xx
xxxx.xxxx.xxxx

лучший ответ для проверки MAC-адреса regex

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

Comments

    Ничего не найдено.