In diesem Format:Was ist ein regulärer Ausdruck für eine MAC-Adresse?
3D:F2:C9:A6:B3:4F
oder:
3D-F2-C9-A6-B3-4F
In diesem Format:Was ist ein regulärer Ausdruck für eine MAC-Adresse?
3D:F2:C9:A6:B3:4F
oder:
3D-F2-C9-A6-B3-4F
der Standard (IEEE 802) Format für Druck MAC-48-Adressen in menschenfreundliche Form sechs Gruppen von zwei Hexadezimalziffern, getrennt durch Bindestriche
-
oder Doppelpunkte:
. So
:
^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$
Siehe auch this question.
Regexes wie folgt:
^[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}$
gibt es nicht eine zu Möglichkeit, es durch Gruppen zu verkürzen? und wie kann ich die Regex kombinieren, um entweder a: oder a - ohne 2 separate reguläre Ausdrücke zu haben? – Xaisoft
Die verkürzte Form, die Netcoder bietet, wird auch funktionieren. Die Verwendung der einen oder der anderen hängt möglicherweise davon ab, ob Sie eine der MAC-Adressen erfassen oder sie nur als Ganzes validieren müssen. – JYelton
Es muss insgesamt validiert werden, wenn es also entweder alle Bindestriche oder alle Doppelpunkte enthält. Wenn es eine Mischung enthält, ist es keine gültige MAC. – Xaisoft
/(?:[A-Fa-f0-9]{2}[:-]){5}(?:[A-Fa-f0-9]{2})/
Ist dies der Antwort von pilcrow ähnlich, nur ohne: xdigit? – Xaisoft
Ein wenig schwer auf den Augen, aber dies:
/^(?:[[:xdigit:]]{2}([-:]))(?:[[:xdigit:]]{2}\1){4}[[:xdigit:]]{2}$/
erzwingt entweder alle Doppelpunkte oder alle Striche für Ihre MAC-Notation.
(Ein einfacherer regex Ansatz könnte A1:B2-C3:D4-E5:F6
erlauben, zum Beispiel, die der oben genannte Ausschuß.)
Das funktioniert, aber können Sie erklären, was: xdigit ist? und ich habe bemerkt, dass du die Gruppe ([-:]) nach der Länge setzt, was macht das entweder alle Doppelpunkte oder Bindestriche? – Xaisoft
@Xaisoft, ': xdigit:' ist die Abkürzung für die hexadezimale Zahl, mehr oder weniger eine andere Art zu sagen '[a-fA-F0-9]'. Das '\ 1' verweist auf die Erfassungsgruppe für den ersten Bindestrich oder den Doppelpunkt' ([-:]) 'und stimmt nur mit dem überein, was dem ersten Mal entspricht. – pilcrow
+1 für die Verwendung sowohl Capturen und nicht-einfangenden Gruppen geeignet, und auch für die Verwendung von '': xdigit: '' '(obwohl diese" Kurzschrift "ist nur kurz kürzer als' '' [a-fA-F0-9 ] '' 'und äquivalent' ''/[a-f0-9]/i''' ist kürzer!) – gb96
Wäre Sie gewarnt, dass die Unicode-Eigenschaft \p{xdigit}
mit den breiten Versionen enthält. Vielleicht bevorzugen Sie stattdessen \p{ASCII_Hex_Digit}
.
Die Antwort auf die gestellte Frage könnte am besten beantwortet werden - vorausgesetzt, Sie haben einen gewissen ehrwürdigen CPAN-Modul installiert - durch Eingabe von:
% perl -MRegexp::Common -lE 'say $RE{net}{MAC}'
ich zeigen, das bestimmte Muster gibt sie here so viel Glück Musternummer 13; Es gibt viele andere.
Dieses Programm:
#!/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
erzeugt diese Ausgabe:
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
, die die Art der Sache, die Sie suchen scheint.
Diese link könnte Ihnen helfen. Sie können diese verwenden: (([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})
Vielen Dank. Das funktioniert für mich. – HeisenBerg
die beste Antwort ist für MAC-Adresse Validierung regex
^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$
sehr hilfreich ... –
Ich glaube nicht :-( – Toto
Trennzeichen: ":", "-",“. "
Doppel- oder Einzel: 00 = 0, 0f = f
/^([0-9a-f]{1,2}[\.:-]){5}([0-9a-f]{1,2})$/i
oder
/^([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 ...
Die zweite wird fälschlicherweise Zeichenfolgen entsprechen, die Nicht-Hex-Zeichen wie g enthalten. –
Die zweite ist nicht gültig in den meisten Aromen, außer BRE/ERE, Die Unterstützung für die Sortierung von Zeichenbereichen variiert je nach Implementierung, daher kann das Ergebnis variieren – nhahtdh
Eine andere Sache ist, dass die Gruppen genau 2 Hexa-Ziffern haben müssen – nhahtdh
Diese Regex passt so ziemlich jedes Mac-Format, einschließlich Cisco Format wie 0102-0304-abcd
^([[:xdigit:]]{2}[:.-]?){5}[[:xdigit:]]{2}$
Beispiel Strings, die es passt:
01:02:03:04:ab:cd
01-02-03-04-ab-cd
01.02.03.04.ab.cd
0102-0304-abcd
01020304abcd
Mixed-Format wird auch abgestimmt werden!
Dies entspricht den Trennzeichen nach einem der ersten fünf Oktette, was bedeutet, dass es zum Beispiel 'aa.aa.bbbb.cccc' akzeptiert. – pilcrow
** # notAllFormats ** Wenn Sie Zugriff auf ein OSX-System mit WiFi haben, führen Sie '/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I' aus und suchen Sie nach der BSSID-Zeile if jedes Oktett ist unter 0x10 führende Null wird fallengelassen ('% x' oder'% 2x' anstelle von '% 02x'' printf' Format verwendet?) – nhed
Sie können Verfahren folgende durch die Validierung für MAC-Adresse vorbei,
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'));
ausführlicher beschrieben: http://regex101.com/r/wB0eT7
Die Python-Version könnte sein:
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})?$/
Die Regex oben bestätigen alle die MAC-Adressen-Typen unter:
01-23-45-67-89-ab
01:23:45:67:89:ab
0123.4567.89ab
Wenn Sie Leerzeichen zwischen den Zahlen müssen, wie diese Variante
3D : F2 : C9 : A6 : B3 : 4F
Die Regex ändert zu
"^([0-9A-Fa-f]{2}\\s[:-]\\s){5}([0-9A-Fa-f]{2})$"
passend zu 48-Bit-EUI-48 und 64-Bit-EUI-64-MAC Adressen:
/\A\h{2}([:\-]?\h{2}){5}\z|\A\h{2}([:\-]?\h{2}){7}\z/
wobei \ h ein Zeichen in [0-9a-fA-F]
oder ist:
/\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/
dies erlaubt '-' oder ':' oder kein Trenn
verwendetfür PHP-Entwickler
filter_var($value, FILTER_VALIDATE_MAC)
Ok, das ist, was ich gesucht habe, aber ich hatte:^([0-9A-F] {2}: | -) {5} ([0-9A-F] {2}) $ – Xaisoft
Ich dachte nach das: | - würde entweder passen und: oder a -. – Xaisoft
@netcoder +1 gut sagte –