4 Stimmen

Regulärer Ausdruck zur Validierung von InetSocketAdressen (ipv4/v6 + Port-Adressen)

Ich suche nach getesteten regulären Ausdrücken für sowohl ipv4 als auch ipv6 InetSocketAddress (d.h. IP-Adresse + Portnummer). Ich bin nicht interessiert an der Validierung von Hostnamen.

Es können zwei Regex sein (eine für ipv4, eine für ipv6) oder ein kombinierter Regex.

Hat jemand welche zu teilen?

EDIT

Für Informationen zum ip4-Format siehe hier, für Informationen zum ipv6-Format siehe hier. Dann wird die Portnummer mit ':' hinzugefügt.

EDIT 2

Um eine Zeichenfolgendarstellung zu erstellen, werde ich wie folgt vorgehen:

byte[] tmp = { 10, 1, 0, 0 };
InetSocketAddress isa = new InetSocketAddress(
        InetAddress.getByAddress(tmp), 443);

was zurückgibt:

/10.1.0.0:443

3voto

mpontillo Punkte 13067

Es könnte keine gute Idee sein, einen regulären Ausdruck auf das .toString() von InetSocketAddress anzuwenden, um dies zu tun. (siehe Kommentare zur obigen Frage)

Ein möglicher Alternativvorschlag besteht darin, eine URL oder URI zu verwenden, um die Adresse im String-Format auszugeben, welches viel standardisierter ist.


**Bearbeiten:**

Andererseits, wenn man sich mit regulären Ausdrücken quälen möchte... ;-)

IPv4:

      Muster: .*/([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):([0-9]+)
Java-Konstante: ".*/([0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+):([0-9]+)"

Verarbeitet nur Adressen im format dotted-quad. Erkennt ungültige Adressen nicht.

IPv6:

      Muster: .*/([0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+(%[a-zA-Z0-9]+)?):([0-9]+)
Java-Konstante: ".*/([0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+:[0-9a-f]+(%[a-zA-Z0-9]+)?):([0-9]+)"

Verarbeitet IPv6-Adressen mit allen 8 16-Bit Abschnitten. (nochmals: der einzige Grund, warum dies funktioniert, ist, dass die Inet6Address-Implementierung in Java die Adressen auf eine nicht standardmäßige Weise druckt - wahrscheinlich, damit sie die Portnummer anhängen kann und es keine Mehrdeutigkeiten gibt). Erkennt ungültige IPv6-Adressen nicht. Verarbeitet nur Kleinbuchstaben-Hex-Zeichen. Verarbeitet Zonen-/Bereichs-IDs (wenn vorhanden) mit Groß- oder Kleinbuchstaben und/oder Ziffern.

Ich habe sie mit einem praktischen Applet, das ich gefunden habe, getestet.

Und zur Vollständigkeit halber denke ich immer noch, dass es keine gute Idee ist. ;-) Ich kann nicht sicher sein, ob alle Java-Plattformen die Adressen auf diese Weise drucken werden.

2voto

buc Punkte 6098

Sie können sich die Regular Expression Library ansehen

1voto

james woodyatt Punkte 2154

Schlechte Idee. IPv6-Adressen in RFC 5952-Form sind keine reguläre Sprache, daher ist das Parsen mit einem regulären Ausdruck der Weg zum Scheitern. Verwenden Sie die richtige Parsing-Funktion, z. B. die POSIX inet_pton-Funktion. Java sollte irgendwo eine haben. Wer weiß, es könnte sogar klug genug sein, IPv6-Adressen mit eingebetteten IPv4-Teilfeldern gemäß Abschnitt 5 des RFC 5952 zu verarbeiten.

Ernsthaft... verwenden Sie dafür keine regulären Ausdrücke.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X