Jeder hat eine gute (vorzugsweise getestete) Regex, um nur einen gültigen DNS-Hostnamen, IPv4 oder IPv6-Adresse zu akzeptieren?Java-Regex zum Akzeptieren eines gültigen Hostnamens, IPv4- oder IPv6-Adresse
Antwort
Ich verstehe, dass Sie forciert eine Regex verwenden können. Wenn es jedoch möglich ist, sollten Sie die Verwendung von Regexes für diese Aufgabe vermeiden und stattdessen eine Java-Bibliotheksklasse für die Validierung verwenden.
Wenn Sie Validierung und DNS-Lookup zusammen durchführen möchten, dann ist InetAddress.getByName(String)
eine gute Wahl. Dies erledigt DNS, IPv4 und IPv6 in einem Schritt und gibt Ihnen eine ordentlich verpackte InetAddress
Instanz zurück, die sowohl den DNS-Namen (falls vorhanden) als auch die IPv4- oder IPv6-Adresse enthält.
Wenn Sie nur eine syntaktische Validierung durchführen möchten, dann Apache commons hat ein paar Klassen, die den Job tun sollten: DomainValidator
und InetAddressValidator
.
Guava hat eine neue Klasse HostSpecifier. Es wird sogar validiert, dass der Host-Name (wenn es ein Host-Name ist) mit einem gültigen "öffentlichen Suffix" endet (zB ".com", ".co.uk" usw.), basierend auf dem neuesten mozilla public-Suffix Liste. Das ist etwas, was Sie NICHT mit einer handgefertigten Regex versuchen möchten!
Ich möchte nicht Code vertrauen, der eine Momentaufnahme der "neuesten" öffentlichen Suffix-Liste entweder gemacht hat, denn ein paar Monate später wird es nicht der neueste sein. – Trejkaz
Inspiriert von dem Code, den ich in this post gefunden habe, habe ich die folgende Validator-Methode erstellt, die ganz einfach zur einfachen Validierung passt. Durch das Lesen des JavaDoc von URI habe ich einige falsche Positive wie "Host: 80" und "Hostname/Seite" entfernt, aber ich kann nicht garantieren, dass noch einige falsche Positive übrig sind.
public static boolean isValidHostNameSyntax(String candidateHost) {
if (candidateHost.contains("/")) {
return false;
}
try {
// WORKAROUND: add any scheme and port to make the resulting URI valid
return new URI("my://[email protected]" + candidateHost + ":80").getHost() != null;
} catch (URISyntaxException e) {
return false;
}
}
- 1. Gültige Zeichen eines Hostnamens?
- 2. vim-airline zum Anzeigen des Hostnamens konfigurieren
- 3. Libcurl: force ipv4 oder ipv6
- 4. Problem beim Konfigurieren eines Spring Bean zum Akzeptieren einer Mule-Nachricht oder eines Ereignisses
- 5. Erste drei Oktette eines IPV4 extrahieren
- 6. IPv4-Header Prüfsummenverifizierung
- 7. Wie für HttpWebRequest oder WebRequest C# IPV6 oder IPV4 zwingen
- 8. SSLContext mit Überprüfung des Hostnamens
- 9. Funktionen zum Bearbeiten von IPv4-Adressen in C#?
- 10. Effiziente Methode zum Speichern von IPv4/IPv6-Adressen
- 11. Should Klassenmethoden akzeptieren Parameter oder Verwendung Klasseneigenschaften
- 12. .Net IPAddress IPv4
- 13. Verfahren zum Generieren von gültigen Typnamen mit generischen in Roslyn
- 14. Sollten SQLiteOpenHelper-Methoden Objekte oder IDs akzeptieren?
- 15. Mehrere IPV4-Adresse
- 16. C Programmierung - Überprüfen aller gültigen Lösungen eines Spielbretts
- 17. Warum request.getRemoteAddr() gibt ipv4 oder ipv6 abhängig vom Kontext zurück (Post Abfrage oder Ajax Abfrage)
- 18. kann keinen gültigen Zertifizierungspfad zum angefragten Ziel finden wso2
- 19. So ignorieren Sie die Verifizierung des Hostnamens oder Setups im AXIS2-Client
- 20. Regex Muster akzeptieren Komma oder Semikolon getrennte Werte
- 21. App Store kann diesen Fluss akzeptieren oder nicht
- 22. Verwenden von Cython, um eine C++ - Vorlage zum Akzeptieren eines beliebigen nupy-Arrays zu verschachteln
- 23. Möchten Sie, dass sich mein Clientprogramm mit IPv4 oder IPv6 verbindet?
- 24. Überladen des Operators << zum Akzeptieren einer Template-Funktion
- 25. Turing Machine zum Akzeptieren von Zeichenketten mit Hauptlängen
- 26. Die meisten Pythonic-Methode zum Akzeptieren von Argumenten mit optparse
- 27. Erstellen variadische nur Referenz oder Zeiger zu akzeptieren
- 28. ipv4.fiddler, wie funktioniert es?
- 29. remote_addr nicht zurück IPv4-Adresse
- 30. InetAddress IPv4 reverse dns lookup
Danke, diese Apache Klassen sollten den Trick machen! – ljbade
Leider wird nur eine Ausnahme ausgelöst, weil ein Host nicht existiert, nicht nur wenn der Host ungültig ist. – Trejkaz
@Trejkaz - über was "redest du? Hast du den alternativen Ansatz auch versucht? –