Wie kann ich überprüfen, ob eine Zeichenfolge eine URL in Java ist?
So überprüfen Sie, ob ein String in Java eine gültige URL ist
lacas
Grodriguez
Sie können versuchen, eine zu erstellen java.net.URL
Objekt daraus. Wenn es sich nicht um eine richtige URL handelt, a MalformedURLException
wird geworfen.
-
Nur um das klarzustellen, es würde nur eine MalformedURLException auslösen
if no protocol is specified, or an unknown protocol is found
. Anders als beim UrlValidator von Apache wird keine zusätzliche Validierung durchgeführt.– Hundebann
14. Oktober 2010 um 10:44 Uhr
-
Es führt tatsächlich auch andere Prüfungen durch, zB Portnummern.
– Grodriguez
14. Oktober 2010 um 10:53 Uhr
-
Ich habe das aus den Javadocs zitiert download.oracle.com/javase/6/docs/api/java/net/URL.html. Sie geben keine anderen Prüfungen an.
– Hundebann
14. Oktober 2010 um 11:05 Uhr
-
Das sagen die Javadocs, aber die Überprüfungen werden durchgeführt (Sie können es selbst versuchen oder sich den Quellcode ansehen, wenn Sie möchten).
– Grodriguez
14. Oktober 2010 um 11:12 Uhr
-
@Tommie “192.168.0.1” (ohne http://) ist keine gültige URL. Ein … Erstellen
java.net.URL
die Übergabe als Parameter schlägt fehljava.net.MalformedURLException: no protocol
. Dies ist das erwartete Verhalten und wird als solches dokumentiert. Hier gibt es keine Fehlalarme.– Grodriguez
23. März 2015 um 8:13 Uhr
Bozo
Sie können verwenden UrlValidator
aus Commons-Validator. Es erspart Ihnen das Schreiben von Code, bei dem der logische Fluss durch das Abfangen einer Ausnahme geleitet wird, was im Allgemeinen als schlechte Praxis angesehen wird. In diesem Fall denke ich jedoch, dass es in Ordnung ist, wie von anderen vorgeschlagen, diese Funktionalität in eine aufgerufene Hilfsmethode zu verschieben isValidUrl(..)
-
es erlaubt keine Unterstriche im Hostnamen
– Udit Kumawat
9. März 2018 um 7:25 Uhr
Rafa0809
Zum Android füge einfach diese Zeile hinzu:
boolean isValid = URLUtil.isValidUrl( "your.uri" );
-
Dies funktioniert nicht, wenn das Schema/Präfix (zB “http”) fehlt (zB “stackoverflow.com”) und es funktioniert auch nicht mit dem Schema/Präfix “ftp” (zB “127.0.0.1”).
– Neph
17. März 2020 um 14:43 Uhr
-
Daher der Unterschied zwischen URL und URI
– Rafa0809
17. März 2020 um 23:03 Uhr
-
Ich habe auch die anderen Vorschläge ausprobiert (
new URL
/new URI
) aberURL
mag keine URLs ohne Schema (und es fühlt sich an, als würde es nur nach dem Schema suchen, sonst nichts) undURI
scheint “true” zurückzugeben, egal was Sie darauf werfen (sogar “—“). Bisher habe ich keinen Weg gefunden, das zu tun, was op gefragt hat, der in 99,9% der Fälle richtig funktioniert.– Neph
18. März 2020 um 9:34 Uhr
Alijandro
Wenn du einprogrammierst AndroidDu könntest benutzen android.webkit.URLUtil
zu testen.
URLUtil.isHttpUrl(url)
URLUtil.isHttpsUrl(url)
Hoffe es wäre hilfreich.
BullyWiiPlaza
public static boolean isValidURL(String urlString) {
try {
URL url = new URL(urlString);
url.toURI();
return true;
} catch (Exception e) {
return false;
}
}
Diese prüft gem RFC2396wie <scheme>://<authority><path>?<query>#<fragment>
aber scheme
muss bekannt sein URL
Quellcode. Diese sind nicht gültig:
telnet://melvyl.ucop.edu
news:comp.infosystems.www.servers.unix
www.google.com
-
Warum nicht einfach
new URI(urlString)
?– Chloe
11. April 2019 um 20:11 Uhr
ConcurrentHashMap
Ergänzend zur Antwort von Bozho, um praktischer zu werden:
- Laden Sie Apache Commons herunter Paket und entpacke es.
- Fügen Sie commons-validator-1.4.0.jar in Ihren Java-Erstellungspfad ein.
-
Testen Sie es mit diesem Beispielcode (Hinweis):
//...your imports import org.apache.commons.validator.routines.*; // Import routines package! public static void main(String[] args){ // Get an UrlValidator UrlValidator defaultValidator = new UrlValidator(); // default schemes if (defaultValidator.isValid("http://www.apache.org")) { System.out.println("valid"); } if (!defaultValidator.isValid("http//www.oops.com")) { System.out.println("INvalid"); } // Get an UrlValidator with custom schemes String[] customSchemes = { "sftp", "scp", "https" }; UrlValidator customValidator = new UrlValidator(customSchemes); if (!customValidator.isValid("http://www.apache.org")) { System.out.println("valid"); } // Get an UrlValidator that allows double slashes in the path UrlValidator doubleSlashValidator = new UrlValidator(UrlValidator.ALLOW_2_SLASHES); if (doubleSlashValidator.isValid("http://www.apache.org//projects")) { System.out.println("INvalid"); }
-
Ausführen/Debuggen
-
Warum nicht einfach
new URI(urlString)
?– Chloe
11. April 2019 um 20:11 Uhr
Aaron Esau
Diese Funktion validiert eine URL und gibt true (gültige URL) oder false (ungültige URL) zurück.
public static boolean isURL(String url) {
try {
new URL(url);
return true;
} catch (Exception e) {
return false;
}
}
Sicher sein zu import java.net.URL;
-
Versagt nicht
http://ProductDetail/2Thumbz, Inc.?source=Admin
wenn es sollte (Komma, Leerzeichen, Punkt).– Chloe
27. Januar 2019 um 4:57 Uhr
Mögliches Duplikat von Validating URL in Java
– james.garriss
6. Dezember 2016 um 19:15 Uhr
Ich suche auch nach dieser Lösung. Vielen Dank für diese Frage.
– Saiful-Islam
15. September 2018 um 7:31 Uhr