W tym formacie:
3D:F2:C9:A6:B3:4F
lub:
3D-F2-C9-A6-B3-4F
Standardowy format (IEEE 802) do drukowania adresów MAC-48 w formie przyjaznej dla człowieka to sześć grup po dwie cyfry szesnastkowe, oddzielone myślnikami
-
lub dwukropkami:
.
Więc:
^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$
Trochę ciężko dla oczu, ale to:
wymusi użycie wszystkich dwukropków lub wszystkich myślników w notacji MAC.
(Na przykład prostsze podejście do wyrażeń regularnych może pozwolić
A1:B2-C3:D4-E5:F6
, które powyższe odrzuca).źródło
:xdigit:
to skrót od cyfry szesnastkowej, mniej więcej inaczej mówiąc[a-fA-F0-9]
.\1
Odnosi się do grupy przechwytującej pierwszej desce rozdzielczej lub okrężnicy([-:])
, i tylko pasuje co dopasowane, że po raz pierwszy.:xdigit:
(chociaż to „skrót” jest tylko krótsze,[a-fA-F0-9]
a odpowiednik/[a-f0-9]/i
krótszy!)C8:FD:19:55:E6:3A
nie działa? To rzeczywisty adres MAC. Zmodyfikowałem Twoje wyrażenie regularne, aby akceptować:
tylko/^(?:[[:xdigit:]]{2}([:]))(?:[[:xdigit:]]{2}\1){4}[[:xdigit:]]{2}$/
dzięki!To wyrażenie regularne pasuje do prawie każdego formatu Mac, w tym formatu Cisco, takiego jak
0102-0304-abcd
Przykładowe ciągi, do których pasuje:
Dopasowany zostanie również format mieszany!
źródło
aa.aa.bbbb.cccc
na przykład zaakceptuje ./System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I
i poszukaj linii BSSID, jeśli którykolwiek oktet ma mniej niż 0x10 wiodącego zera jest usuwany (%x
lub%2x
raczej niż%02x
printf
używany format?)Separator: " : ", " - " " "
podwójny lub pojedynczy: 00 = 0, 0f = f
lub
źródło
{1,2}
wyrażenia regularnego[0-9a-F]
powinien prawdopodobnie zostać przepisany jako:[0-9a-fA-F]
Ostrzegamy, że właściwość Unicode
\p{xdigit}
obejmuje wersje FULLWIDTH. Wolisz\p{ASCII_Hex_Digit}
zamiast tego.Najlepszą odpowiedzią na zadane pytanie może być - pod warunkiem, że masz zainstalowany pewien czcigodny moduł CPAN - wpisując:
Pokazuję konkretny wzorzec, który wyprowadza tutaj jako szczęśliwy wzorzec numer 13; jest wiele innych.
Ten program:
generuje ten wynik:
Co wydaje się być czymś, czego szukasz.
źródło
Ten link może ci pomóc. Możesz użyć tego:
(([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.){2}[0-9A-Fa-f]{4})
źródło
Zobacz również to pytanie .
Regexes w następujący sposób:
źródło
źródło
Wersja Pythona mogłaby wyglądać następująco:
źródło
Wyrażenie regularne powyżej sprawdza poprawność wszystkich poniższych typów adresów MAC:
źródło
dla programisty PHP
źródło
Nie sądzę, że główne wyrażenie regularne jest poprawne, ponieważ również klasyfikuje
jako prawidłowy adres MAC, nawet jeśli nie jest poprawny. Prawidłowy byłby:
Więc za każdym razem możesz wybrać „:” lub „-” dla całego adresu MAC.
źródło
Możesz skorzystać z poniższej procedury, przekazując adres MAC do weryfikacji,
źródło
Osoby PHP:
Potrzebujesz wyjaśnienia: http://regex101.com/r/wB0eT7
źródło
Jeśli potrzebujesz spacji między liczbami, jak ten wariant
Wyrażenie regularne zmieni się na
źródło
aby dopasować 48-bitowe adresy MAC EUI-48 i 64-bitowe EUI-64:
gdzie \ h jest znakiem w [0-9a-fA-F]
lub:
pozwala to na użycie „-” lub „:” lub bez separatora
źródło
Może najkrótszy możliwy:
Aktualizacja : istnieje lepszy sposób sprawdzania poprawności adresów MAC w PHP, który obsługuje zarówno adresy MAC ze stylem myślnika, jak i dwukropka. Użyj zmiennej filter_var () :
Jak wiem, obsługuje adresy MAC w tych formach (x: liczba szesnastkowa):
źródło
Wielkie dzięki @Moshe za wielką odpowiedzi powyżej. Po przeprowadzeniu dalszych badań chciałbym dodać moje dodatkowe ustalenia, zarówno w odniesieniu do IEEE 802, jak i wymuszania spójnego użycia separatora w wyrażeniach regularnych.
Pełne uznanie dla @Moshe tutaj za jego wstępne oświadczenie i dla @pilcrow za wskazanie, że IEEE 802 obejmuje tylko hipeny.
Oto wyrażenie regularne, które wymusza użycie tego samego separatora w całym adresie mac:
Demo Regex101
A oto dodatkowy, który pozwala w ogóle nie używać separatora:
Demo Regex101
źródło
Ponieważ adres MAC może mieć 6 lub 20 bajtów (infiniband, ...), poprawna odpowiedź brzmi:
możesz zamienić: na [: -.]? jeśli chcesz mieć różne separatory lub żadnych.
źródło
Ten jest mały:
Pamiętaj, że może przejść dziwna mieszanka kilku znaków lub separatorów.
źródło
najlepszą odpowiedzią jest wyrażenie regularne sprawdzania poprawności adresu mac
źródło