Sie können die folgenden regulären Ausdrücke separat oder durch Kombinieren in einem gemeinsamen ODER-Ausdruck verwenden.
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 Spiele gültige IP - Adressen und ValidHostnameRegex gültige Hostnamen. Abhängig von der verwendeten Sprache muss \ möglicherweise mit \ maskiert werden.
ValidHostnameRegex ist gemäß RFC 1123 gültig . Ursprünglich gab RFC 952 an, dass Hostnamensegmente nicht mit einer Ziffer beginnen dürfen.
http://en.wikipedia.org/wiki/Hostname
Die ursprüngliche Spezifikation von Hostnamen in RFC 952 sah vor , dass Beschriftungen nicht mit einer Ziffer oder einem Bindestrich beginnen dürfen und nicht mit einem Bindestrich enden dürfen. Eine nachfolgende Spezifikation ( RFC 1123 ) erlaubte jedoch, dass Hostnamenbezeichnungen mit Ziffern beginnen.
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
) in die ASCII-Form konvertiert und dann validiert werden.123.456.789.0
und es heißt, es ist ein gültiger Hostname.Der reguläre Ausdruck des Sminks für den Hostnamen beachtet nicht die Beschränkung der Länge einzelner Labels innerhalb eines Hostnamens. Jedes Label innerhalb eines gültigen Hostnamens darf nicht länger als 63 Oktette sein.
Beachten Sie, dass der Backslash am Ende der ersten Zeile (oben) die Unix-Shell-Syntax zum Teilen der langen Zeile ist. Es ist kein Teil des regulären Ausdrucks.
Hier ist nur der reguläre Ausdruck in einer einzelnen Zeile:
Sie sollten auch separat prüfen, ob die Gesamtlänge des Hostnamens 255 Zeichen nicht überschreiten darf . Weitere Informationen finden Sie in RFC-952 und RFC-1123.
quelle
/^[a-z\d]([a-z\d\-]{0,61}[a-z\d])?(\.[a-z\d]([a-z\d\-]{0,61}[a-z\d])?)*$/i
Verwenden Sie den folgenden regulären Ausdruck, um eine gültige IP-Adresse abzugleichen:
anstatt:
Erläuterung
Viele Regex-Engines entsprechen der ersten Möglichkeit in der
OR
Sequenz. Versuchen Sie beispielsweise den folgenden regulären Ausdruck:Prüfung
Testen Sie den Unterschied zwischen gut und schlecht
quelle
([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]))*
versus([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]))*
+
am Ende statt*
die Fehler zu sehen.Ich kann den Top-Beitrag anscheinend nicht bearbeiten, daher füge ich hier meine Antwort hinzu.
Für den Hostnamen - einfache Antwort, am Beispiel egrep hier - http: //www.linuxinsight.com/how_to_grep_for_ip_addresses_using_the_gnu_egrep_utility.html
Der Fall berücksichtigt jedoch keine Werte wie 0 im ersten Oktett und Werte größer als 254 (IP-Adresse) oder 255 (Netzmaske). Vielleicht würde eine zusätzliche if-Anweisung helfen.
Was den legalen DNS-Hostnamen betrifft, habe ich, vorausgesetzt, Sie suchen nur nach Internet-Hostnamen (und nicht nach Intranet), den folgenden Ausschnitt geschrieben, eine Mischung aus Shell / PHP, die jedoch als regulärer Ausdruck anwendbar sein sollte.
Gehen Sie zuerst zur ietf-Website, laden Sie eine Liste der legalen Domain-Namen der Ebene 1 herunter und analysieren Sie sie:
Das sollte Ihnen einen schönen Code geben, der die Rechtmäßigkeit von Top-Domain-Namen wie .com .org oder .ca überprüft
Fügen Sie dann den ersten Teil des Ausdrucks gemäß den hier angegebenen Richtlinien hinzu - http: //www.domainit.com/support/faq.mhtml?category=Domain_FAQ&question=9 (eine alphanumerische Kombination und ein '-' Symbol, Bindestrich sollte nicht enthalten sein der Anfang oder das Ende eines Oktetts.
Dann setzen Sie alles zusammen (PHP preg_match Beispiel):
Möglicherweise möchten Sie auch eine if-Anweisung hinzufügen, um zu überprüfen, ob die von Ihnen überprüfte Zeichenfolge kürzer als 256 Zeichen ist - http://www.ops.ietf.org/lists/namedroppers/namedroppers.2003/msg00964.html
quelle
Es ist erwähnenswert, dass es für die meisten Sprachen Bibliotheken gibt, die dies für Sie tun und häufig in die Standardbibliothek integriert sind. Und diese Bibliotheken werden wahrscheinlich viel häufiger aktualisiert als Code, den Sie vor vier Jahren aus einer Stapelüberlauf-Antwort kopiert und vergessen haben. Und natürlich analysieren sie die Adresse im Allgemeinen auch in eine verwendbare Form, anstatt Ihnen nur eine Übereinstimmung mit einer Reihe von Gruppen zu geben.
Beispiel: Erkennen und Parsen von IPv4 in (POSIX) C:
Offensichtlich funktionieren solche Funktionen nicht, wenn Sie beispielsweise versuchen, alle gültigen Adressen in einer Chat-Nachricht zu finden. Aber selbst dort ist es möglicherweise einfacher, einen einfachen, aber übereifrigen regulären Ausdruck zu verwenden, um potenzielle Übereinstimmungen zu finden, und dann die zu verwenden Bibliothek, um sie zu analysieren.
Zum Beispiel in Python:
quelle
quelle
Ich denke, dies ist der beste IP-Validierungs-Regex. bitte einmal überprüfen !!!
quelle
quelle
Dies funktioniert für gültige IP-Adressen:
quelle
quelle
Hier ist ein regulärer Ausdruck, den ich in Ant verwendet habe, um eine Proxy-Host-IP oder einen Hostnamen aus ANT_OPTS zu erhalten. Dies wurde verwendet, um die Proxy-IP zu erhalten, damit ich einen Ant "isreachable" -Test ausführen konnte, bevor ich einen Proxy für eine gegabelte JVM konfigurierte.
quelle
\w
genau dort, es erfasst keine IP, nur den Hostnamen in bestimmten Situationen.Ich fand, dass dies für IP-Adressen ziemlich gut funktioniert. Es wird wie die Top-Antwort validiert, stellt aber auch sicher, dass die IP isoliert ist, sodass nach oder vor der IP kein Text oder mehr Zahlen / Dezimalstellen stehen.
quelle
Diese werden nur für diese Typüberprüfung verwendet
funktionieren nur, wenn http://www.kk.com http://www.kk.co.in
funktioniert nicht für
http://www.kk.com/ http: //www.kk.co.in.kk
http://www.kk.com/dfas http://www.kk.co.in/
quelle
Versuche dies:
es funktioniert in meinem Fall.
quelle
In Bezug auf IP-Adressen scheint es einige Debatten darüber zu geben, ob führende Nullen aufgenommen werden sollen. Es war einmal die übliche Praxis und wird allgemein akzeptiert, daher würde ich argumentieren, dass sie unabhängig von der aktuellen Präferenz als gültig gekennzeichnet werden sollten . Es gibt auch einige Unklarheiten darüber, ob Text vor und nach der Zeichenfolge validiert werden soll, und ich denke, dies sollte auch so sein. 1.2.3.4 ist eine gültige IP, 1.2.3.4.5 jedoch nicht, und weder der 1.2.3.4-Teil noch der 2.3.4.5-Teil sollten zu einer Übereinstimmung führen. Einige der Bedenken können mit diesem Ausdruck behandelt werden:
Der unglückliche Teil hier ist die Tatsache, dass der Regex-Teil, der ein Oktett validiert, wiederholt wird, wie dies bei vielen angebotenen Lösungen der Fall ist. Obwohl dies besser ist als für Instanzen des Musters, kann die Wiederholung vollständig eliminiert werden, wenn Unterprogramme im verwendeten regulären Ausdruck unterstützt werden. Das nächste Beispiel aktiviert diese Funktionen mit dem
-P
Schalter vongrep
und nutzt auch die Lookahead- und Lookbehind-Funktionen. (Der von mir ausgewählte Funktionsname ist 'o' für Oktett. Ich hätte 'Oktett' als Namen verwenden können, wollte aber knapp sein.)Die Behandlung des Punkts kann tatsächlich zu einem falschen Negativ führen, wenn sich IP-Adressen in einer Datei mit Text in Form von Sätzen befinden, da der a-Punkt folgen könnte, ohne dass er Teil der gepunkteten Notation ist. Eine Variante des oben genannten würde das beheben:
quelle
quelle
Das neue Netzwerkframework verfügt über fehlerhafte Initialisierer für struct IPv4Address und struct IPv6Address, die den IP-Adressenteil sehr einfach verarbeiten. Dies in IPv6 mit einem regulären Ausdruck zu tun, ist bei allen Verkürzungsregeln schwierig.
Leider habe ich keine elegante Antwort für den Hostnamen.
Beachten Sie, dass das Netzwerkframework neu ist, sodass Sie möglicherweise gezwungen sind, für neuere Betriebssystemversionen zu kompilieren.
quelle
Wie wäre es damit?
quelle
auf php:
filter_var(gethostbyname($dns), FILTER_VALIDATE_IP) == true ? 'ip' : 'not ip'
quelle
Suchen nach Hostnamen wie ... mywebsite.co.in, thangaraj.name, 18thangaraj.in, thangaraj106.in usw.,
quelle
inet_aton
ist gut genug.Ich dachte über dieses einfache Regex-Übereinstimmungsmuster für die IP-Adressanpassung nach \ d + [.] \ D + [.] \ D + [.] \ D +
quelle
^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}
und das wird natürlich nicht der richtige Weg sein. Wenn Sie eine Sprache zum Schreiben von Skripten haben, haben Sie sicher Zugriff auf die Netzwerkfunktionen. Der beste Weg, um eine ECHTE IP zu überprüfen, besteht darin, das System anzuweisen, die IP-Adresse zu konvertieren und in das richtige Format zu bringen. Überprüfen Sie dann, ob sie wahr / falsch ist. Im Falle von Python benutze ichsocket.inet_aton(ip)
. Bei PHP brauchst duinet_aton($ip)
.