Überprüfen der IPv4-Zeichenfolge in Java
Balg-Methode ist die Validierung, wenn die Zeichenfolge korrekt ist IPv4-Adresse es gibt true zurück, wenn es gültig ist. Alle Verbesserungen in regex und Eleganz wäre sehr geschätzt:
public static boolean validIP(String ip) {
if (ip == null || ip.isEmpty()) return false;
ip = ip.trim();
if ((ip.length() < 6) & (ip.length() > 15)) return false;
try {
Pattern pattern = Pattern.compile("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$");
Matcher matcher = pattern.matcher(ip);
return matcher.matches();
} catch (PatternSyntaxException ex) {
return false;
}
}
InformationsquelleAutor der Frage Mat B. | 2011-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein leichter zu Lesen, etwas weniger effizient, man könnte es gehen.
InformationsquelleAutor der Antwort rouble
UPDATE: Commons-HttpClient und seine Nachfolger HttpComponents-HttpClient angenommen haben, diese Funktionalität. Nutzen Sie diese version von es etwa so:
InetAddressUtils.isIPv4Address(Str)
.Die Entwickler-version von Apache Commons Validator hat eine
InetAddressValidator
class, die eineisValidInet4Address(String)
Methode, um eine überprüfung durchführen, um zu sehen, dass einer bestimmtenString
ist eine gültige IPv4-Adresse.Den Quellcode angezeigt werden können aus dem repository, so dass vielleicht einige Ideen für Verbesserungen, wenn Sie spürt, dass es Sie gibt.
Einen schnellen Blick in den code zeigt, dass Ihre Methode zu kompilieren
Pattern
bei jedem Aufruf der Methode. Ich würde zu bewegen, dassPattern
Klasse zu einemstatic
Feld zu vermeiden, die kostspieligen Muster Kompilierung bei jedem Aufruf.InformationsquelleAutor der Antwort coobird
Wenn Sie möchten, verwenden Sie eine Bibliothek, die mit einer veröffentlichten version suppporting sowohl IPv4 als auch IPv6 unterstützen, können Sie Guave
InformationsquelleAutor der Antwort Stefan L
Hier ist eine Lösung, die mit Java 8 streams, um zu überprüfen, dass die Adresse besteht aus genau 4 zahlen zwischen 0 und 255 inklusive sein, die durch Punkte getrennt sind:
InformationsquelleAutor der Antwort Raniz
Wenn Euch das nichts ausmacht mit der dns-Auflösung auf ungültige ip-Adressen wie
www.example.com
verwenden, können Sie die InetAddress Methoden, um zu überprüfen:Die Methode überprüft, ob es eine Instanz von Inet4Address und wenn der parameter ip-Adresse und nicht den Hostnamen.
Wenn Sie erwarten, eine Menge von Hostnamen als Parameter, beachten Sie, dass diese Implementierung wird das DNS verwendet, um zu versuchen, es zu beheben. Könnte dies ein performance betreffen.
Sonst können Sie einen Blick in die
boolean sun.net.util.IPAddressUtil.isIPv4LiteralAddress(String src)
wie der String wird geparst, gibt es für IPv4-check.InformationsquelleAutor der Antwort Michael Konietzka
Finden, regex Beispiel aus diese
InformationsquelleAutor der Antwort bigspawn
In glaube, diese Lösung ist sehr elegant, obwohl es dauert eine minute, um es zu verstehen.
Die grundlegende Idee ist, einen sub-string und als zu validieren.
Bitte beachten Sie, dass ich Schalter x und y, die seit dem start eines sub-string wird immer das Ende des letzten plus 1.
Diese Lösung ist etwa 20x schneller als ein regex-Variante und bis zu 2x schneller als die Spaltung.
Wenn Sie wissen, dass Sie haben eine Menge falsche IPs prüfen, indem Sie den folgenden code unter den ersten wenn. Dadurch wird der code 1,5 x langsamer, aber im Falle eines Fehlers zu verbessern, indem 700 x
InformationsquelleAutor der Antwort arcs
Wenn Sie code verwenden, die in der Frage, Sie werden wollen, ändern Sie die Zeile:
zu
InformationsquelleAutor der Antwort jtbr
Versuchen Sie, die folgenden regrex für IPv4
hoffe es hilft 🙂
InformationsquelleAutor der Antwort bane19
Ich denke, der richtige Weg ist und bauen eine
IPAddress
Klasse und instantiieren, indem es eine string-Repräsentation der ip-Adresse.Diese Weise können Sie split, die verschiedenen Validierungs-Schritte in Instanz-Methoden und Holen Sie sich einige Trennung der Anliegen gehen.
Zum Beispiel, dieser hier ist in der Regel seine eigene Methode, rufen Sie diese einfach
isEmpty
:Auch dies sollte eine separate Methode, man könnte nennen dies eine
hasProbableLength
.Hier gibt es viele Dinge, auf. Ich würde versuchen, diese zu brechen und vielleicht versuchen, überspringen Sie die regex vollständig.
Ich würde erstmal split die Zeichenfolge, die auf Punkten und sehen, dass ich genau vier Gruppen. Rufen Sie diese Methode auf
divideIntoGroups
Ich würde dann überprüfen Sie jede der Gruppen, für die ein Wert zwischen 0 und 255. Rufen Sie diese Methode auf
validateGroups
Nun, dass Sie diese, wenn Sie jemals wollen, um diese Klasse erweitern, um auch Aussehen, wenn die IP "localhost" oder, wenn es eine broadcast-Adresse, es ist ziemlich einfach, dies zu tun. Dies ist, was Trennung der Anliegen gibt Sie.
Können Sie auch genau sagen, welche Ihrer Validierungsregeln gebrochen wurde in der Validierung der IP-Adresse string. Etwas, dass regex nicht.
InformationsquelleAutor der Antwort firelynx
Einfachste Möglichkeit, die ich gefunden um zu überprüfen, gegeben ip ist korrekt in die ipv4 verwenden commons-validator-1.4.0.jar hat Klasse:--
InetAddressValidator
E. g.
welche mit dieser einfachen regex :--
InformationsquelleAutor der Antwort Shekhar Khairnar
Meisten Antworten (außer die von Michael Konietzka) sind falsch: 10.8, zum Beispiel, ist eine gültige IP4-Adresse (Abkürzung für "10.0.0.8" konfiguriert).
SehenTextliche Darstellung von IP-Adressen in der Java-Spezifikationen.
Wie gesehen werden kann in der Referenz, um zu überprüfen, eine numerische Darstellung, es können 1 bis 4 Teile, und in jedem Fall unterschiedliche Einschränkungen auf die Teile gelten.
InformationsquelleAutor der Antwort Jonathan Rosenne
Ich würde vorschlagen, mit dem, was verfügbar ist auf der Plattform/framework, die Sie entwickeln.
Wenn es nichts, was Sie als gut genug, dann könnten Sie wollen einfach nur hinzufügen, ein regex kompiliert, um eine helper-Klasse. Zum Beispiel, hier's, wie das Android-framework funktioniert es:
InformationsquelleAutor der Antwort Juan Andrés Diana
gleiche Antwort wie coobird. Fügen Sie einfach localhost auf die Erklärung. Die meisten der Umgebungen nimmt Sie "localhost" als einen gültigen host-Namen. Es ist nicht eine ipv4-format, aber es sollte auch zu Bedenken Gültigkeit.
InformationsquelleAutor der Antwort rinjan
InformationsquelleAutor der Antwort user7839057
Die IP-Adresse Java-Bibliothek wird es tun. In der javadoc steht im link. Disclaimer: ich bin der Projekt manager.
Diese Bibliothek unterstützt IPv4 und IPv6 transparent, so dass die Validierung entweder funktioniert auf die gleiche unten), und es unterstützt auch die CIDR-Präfix-Länge IPC4-Adressen als auch. Es unterstützt die ungewöhnliche Formate wie inet_aton (zum Beispiel 10.8 bereits erwähnt wurde, in einer anderen Antwort hier)
Überprüfen, ob eine Adresse gültig ist:
InformationsquelleAutor der Antwort Sean F