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

В этом формате:

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

или

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

Ответ 1

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

Итак:

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

Ответ 2

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

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

будет использовать все двоеточия или все тире для вашей нотации MAC.

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

Ответ 3

Это регулярное выражение соответствует почти всем форматам 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

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

Ответ 4

: : "," - "," . "

double или single: 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 ...

Ответ 5

Будем предупреждать, что свойство Unicode \p{xdigit} содержит версии FULLWIDTH. Вместо этого вы можете предпочесть \p{ASCII_Hex_Digit}.

Ответ на заданный вопрос может быть лучше всего ответил - если у вас установлен определенный почтенный модуль 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

Кажется, что вы ищете.

Ответ 7

См. этот вопрос.

Режимы:

^[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}$

Ответ 8

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

Ответ 9

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

re.compile(r'\A(?:[\da-f]{2}[:-]){5}[\da-f]{2}\Z',re.I)

Ответ 10

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

Ответ 11

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

filter_var($value, FILTER_VALIDATE_MAC)

Ответ 12

Вы можете использовать следующую процедуру, передав 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();             
}

Ответ 13

PHP файлы:

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

Ответ 14

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

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

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

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

Ответ 15

для соответствия как 48-разрядным MAC-адресам EUI-48, так и 64-разрядным MAC-адресам EUI-64:

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

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

Ответ 16

Возможно самое короткое из возможных:

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

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

// Returns $macAddress, if it 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

Ответ 17

Большое спасибо @Moshe за отличный ответ выше. Проведя еще несколько исследований, я хотел бы добавить свои дополнительные выводы как в отношении IEEE 802, так и в отношении обеспечения согласованного использования разделителей в регулярных выражениях.

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

Полная благодарность @Moshe здесь за его первоначальное утверждение, и @pilcrow за то, что он указал, что IEEE 802 только покрывает hypens.

Вот регулярное выражение, которое заставляет тот же самый разделитель использоваться всюду по MAC-адресу:

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

Regex101 demo

А вот еще один, который позволяет вообще не использовать разделитель:

^(?:(?:[0-9A-Fa-f]{2}(?=([-:]|))(?:\1[0-9A-Fa-f]{2}){5}))$

Regex101 demo

Ответ 18

Поскольку MAC-адрес может быть 6 или 20 байтов (infiniband,...), правильный ответ:

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

Вы можете заменить: на [: -.]? если вы хотите разные разделители или нет.

Ответ 19

Я не думаю, что основной RegEx является правильным, поскольку он также классифицирует

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

как действительный MAC-адрес, даже если он не является правильным. Правильный будет:

((([a-zA-z0-9]{2}[-:]){5}([a-zA-z0-9]{2}))|(([a-zA-z0-9]{2}:){5}([a-zA-z0-9]{2})))

Так что каждый раз вы можете выбрать ":" или "-" для всего MAC-адреса.

Ответ 20

Этот маленький:

(([0-9A-F]{2}[:-]?){6})

Имейте в виду, что странная смесь нескольких символов или разделителей может пройти.

Ответ 21

лучший ответ для регулярного выражения для регулярного выражения MAC

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