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