Możesz użyć następujących wyrażeń regularnych osobno lub łącząc je we wspólne wyrażenie LUB.
ValidIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
ValidHostnameRegex = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$";
ValidIpAddressRegex pasuje do prawidłowych adresów IP i ValidHostnameRegex prawidłowych nazw hostów. W zależności od używanego języka \ może być konieczne użycie znaku ucieczki \.
ValidHostnameRegex jest ważny zgodnie z RFC 1123 . Pierwotnie RFC 952 określał, że segmenty nazwy hosta nie mogą zaczynać się cyfrą.
http://en.wikipedia.org/wiki/Hostname
Oryginalna specyfikacja nazw hostów w RFC 952 wymagała , aby etykiety nie zaczynały się cyfrą lub łącznikiem i nie mogły kończyć się łącznikiem. Jednak kolejna specyfikacja ( RFC 1123 ) zezwalała, aby etykiety nazw hostów zaczynały się od cyfr.
Valid952HostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";
éxämplè.com
=xn--xmpl-loa1ab.com
), a następnie zweryfikować.123.456.789.0
i jest to poprawna nazwa hosta.Wyrażenie regularne nazwy smink nie uwzględnia ograniczenia długości poszczególnych etykiet w nazwie hosta. Każda etykieta w prawidłowej nazwie hosta może mieć nie więcej niż 63 oktety.
Zauważ, że ukośnik odwrotny na końcu pierwszego wiersza (powyżej) to składnia powłoki uniksowej do dzielenia długiej linii. To nie jest część samego wyrażenia regularnego.
Oto tylko wyrażenie regularne w jednym wierszu:
Powinieneś również sprawdzić to osobno czy całkowita długość nazwy hosta nie może przekraczać 255 znaków . Aby uzyskać więcej informacji, zapoznaj się z RFC-952 i RFC-1123.
źródło
/^[a-z\d]([a-z\d\-]{0,61}[a-z\d])?(\.[a-z\d]([a-z\d\-]{0,61}[a-z\d])?)*$/i
Aby dopasować prawidłowy adres IP, użyj następującego wyrażenia regularnego:
zamiast:
Wyjaśnienie
Wiele silników wyrażeń regularnych odpowiada pierwszej możliwości w
OR
sekwencji. Na przykład wypróbuj następujące wyrażenie regularne:Test
Sprawdź różnicę między dobrem a złem
źródło
([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*
kontra([a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]|[a-zA-Z0-9])(\.([a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])|[a-zA-Z0-9]))*
+
na końcu zamiast*
zobaczyć błąd.Wydaje mi się, że nie mogę edytować najwyższego postu, więc dodam tutaj swoją odpowiedź.
Dla nazwy hosta - łatwa odpowiedź, na przykład egrep tutaj - http: //www.linuxinsight.com/how_to_grep_for_ip_addresses_using_the_gnu_egrep_utility.html
Chociaż przypadek nie uwzględnia wartości takich jak 0 w pierwszym oktecie i wartości większych niż 254 (adresy IP) lub 255 (maska sieci). Może pomoże dodatkowe oświadczenie if.
Co do legalnej nazwy hosta dns, pod warunkiem, że sprawdzasz tylko nazwy hostów internetowych (a nie intranet), napisałem następujący fragment, mieszankę powłoki / php, ale powinien on być stosowany jako każde wyrażenie regularne.
najpierw przejdź na stronę ietf, pobierz i przeanalizuj listę nazw domen poziomu 1:
To powinno dać ci ładny kod, który sprawdza legalność najlepszych nazw domen, takich jak .com .org lub .ca
Następnie dodaj pierwszą część wyrażenia zgodnie z wytycznymi tutaj - http: //www.domainit.com/support/faq.mhtml?category=Domain_FAQ&question=9 (dowolna kombinacja alfanumeryczna i symbol „-”, myślnik nie powinien być początek lub koniec oktetu.
Następnie poskładaj wszystko razem (przykład PHP preg_match):
Możesz także dodać instrukcję if, aby sprawdzić, czy sprawdzany ciąg jest krótszy niż 256 znaków - http://www.ops.ietf.org/lists/namedroppers/namedroppers.2003/msg00964.html
źródło
Warto zauważyć, że istnieją biblioteki dla większości języków, które robią to za Ciebie, często wbudowane w bibliotekę standardową. Te biblioteki prawdopodobnie będą aktualizowane znacznie częściej niż kod, który skopiowałeś odpowiedź przepełnienia stosu cztery lata temu i zapomniałeś. I oczywiście zazwyczaj parsują adres w jakiejś użytecznej formie, zamiast po prostu dać ci dopasowanie do grupy.
Na przykład wykrywanie i analizowanie IPv4 w (POSIX) C:
Oczywiście takie funkcje nie będą działać, jeśli próbujesz np. Znaleźć wszystkie prawidłowe adresy w wiadomości czatu - ale nawet tam łatwiej jest użyć prostego, ale nadgorliwego wyrażenia regularnego, aby znaleźć potencjalne dopasowania, a następnie użyć biblioteka do ich parsowania.
Na przykład w Pythonie:
źródło
źródło
Myślę, że to najlepszy regex sprawdzania poprawności IP. proszę sprawdź to raz !!!
źródło
źródło
Działa to dla prawidłowych adresów IP:
źródło
źródło
Oto wyrażenie, którego użyłem w Ant, aby uzyskać adres IP hosta proxy lub nazwę hosta z ANT_OPTS. Służyło to do uzyskania adresu IP serwera proxy, dzięki czemu mogłem uruchomić test Ant „nieosiągalny” przed skonfigurowaniem serwera proxy dla rozwidlonej maszyny JVM.
źródło
\w
prawda, nie przechwytuje adresu IP, tylko nazwę hosta w określonych sytuacjach.Odkryłem, że działa całkiem dobrze w przypadku adresów IP. Sprawdza poprawność jak najwyższa odpowiedź, ale upewnia się również, że ip jest izolowane, więc żaden tekst ani więcej liczb / miejsc po przecinku nie jest przed ani przed ip.
źródło
te ponownie są używane tylko do sprawdzania poprawności tego typu
działają tylko wtedy, gdy http://www.kk.com http://www.kk.co.in
nie działa dla
http://www.kk.com/ http: //www.kk.co.in.kk
http://www.kk.com/dfas http://www.kk.co.in/
źródło
Spróbuj tego:
to działa w moim przypadku.
źródło
Jeśli chodzi o adresy IP, wydaje się, że toczy się debata na temat tego, czy dołączyć wiodące zera. Kiedyś była to powszechna praktyka i jest ogólnie akceptowana, dlatego argumentowałbym, że należy je oznaczyć jako ważne bez względu na obecne preferencje. Istnieje również pewna dwuznaczność co do tego, czy tekst przed i po ciągu powinien zostać sprawdzony, i znowu myślę, że powinien. 1.2.3.4 jest prawidłowym IP, ale 1.2.3.4.5 nie jest i ani część 1.2.3.4, ani część 2.3.4.5 nie powinny skutkować dopasowaniem. Niektóre obawy można rozwiązać za pomocą tego wyrażenia:
Niefortunne jest tutaj to, że część wyrażenia regularnego, która sprawdza poprawność oktetu, jest powtarzana, jak to ma miejsce w wielu oferowanych rozwiązaniach. Chociaż jest to lepsze niż w przypadku wzorców, powtórzenie można całkowicie wyeliminować, jeśli w używanym wyrażeniu regularnym obsługiwane są podprogramy. Następny przykład włącza te funkcje wraz z
-P
przełączaniem,grep
a także wykorzystuje funkcje lookahead i lookbehind. (Nazwa funkcji, którą wybrałem, to „o” dla oktetu. Mógłbym użyć „oktetu” jako nazwy, ale chciałem być zwięzły.)Obsługa kropki może faktycznie tworzyć fałszywe negatywy, jeśli adresy IP znajdują się w pliku z tekstem w formie zdań, ponieważ kropka może nadejść bez uwzględnienia kropkowanej notacji. Wariant powyższego rozwiązałby to:
źródło
źródło
Nowa struktura sieci ma niezawodne inicjatory dla struktur IPv4Address i struct IPv6Address, które bardzo łatwo obsługują część adresu IP. Robienie tego w IPv6 z wyrażeniem regularnym jest trudne ze wszystkimi zasadami skracania.
Niestety nie mam eleganckiej odpowiedzi na nazwę hosta.
Zauważ, że Framework sieci jest najnowszy, więc może zmusić cię do kompilacji dla najnowszych wersji systemu operacyjnego.
źródło
co powiesz na to?
źródło
na php:
filter_var(gethostbyname($dns), FILTER_VALIDATE_IP) == true ? 'ip' : 'not ip'
źródło
Sprawdzanie nazw hostów, takich jak ... mywebsite.co.in, thangaraj.name, 18thangaraj.in, thangaraj106.in itp.,
źródło
inet_aton
jest wystarczająco dobry.Pomyślałem o tym prostym wzorcu dopasowania wyrażeń regularnych do dopasowywania adresów IP \ d + [.] \ D + [.] \ D + [.] \ D +
źródło
^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
i oczywiście nie będzie to właściwy sposób. Jeśli masz język do pisania skryptu, na pewno będziesz mieć dostęp do jego funkcji sieciowych. Najlepszym sposobem na sprawdzenie PRAWDZIWEGO adresu IP jest sprawdzenie, czy system przekonwertował i ip do właściwego formatu, a następnie sprawdzenie wartości true / false. W przypadku Pythona używamsocket.inet_aton(ip)
. Przypadek PHP potrzebujeszinet_aton($ip)
.