Überprüfen Sie, ob ein JavaScript-String eine URL ist
Lesezeit: 6 Minuten
Bruno
Gibt es eine Möglichkeit in JavaScript zu prüfen, ob eine Zeichenfolge eine URL ist?
RegExe werden ausgeschlossen, da die URL höchstwahrscheinlich wie geschrieben ist stackoverflow; das heißt, dass es möglicherweise kein a hat .com, www oder http.
Fehlt die httpes ist standardmäßig keine URL.
– nfechner
19. April 2011 um 13:29 Uhr
@nfechner das heißt, wenn es kein Protokoll angibt und den Doppelpunkt verwendet (vorzugsweise mit zwei Schrägstrichen als nächstes), dann ist es keine URL?
– jcolebrand
19. April 2011 um 13:30 Uhr
Wie Sie in der lesen können URL-RFC, der einzige Teil, der wirklich notwendig ist, um einen String zu einer gültigen URL zu machen, ist der Doppelpunkt. Gültige URLs sehen so aus: <scheme>:<scheme-specific-part>
– nfechner
19. April 2011 um 13:34 Uhr
siehe stackoverflow.com/a/3975573/572180
– nguyên
29. Mai 2013 um 1:30 Uhr
So testen Sie, ob etwas eine URL ist höchst kontextabhängig und ohne weitere Qualifizierung zu vage. Spielt es für Sie eine Rolle, ob es der URL-RFC-Spezifikation entspricht, funktioniert, wenn ein OS-Systemaufruf zum Öffnen der URL erfolgt, analysiert als href in einem Ankerelement, funktioniert beim Aufrufen window.open(url), zeigt auf etwas, das wirklich existiert, funktioniert in der Adressleiste des Browsers oder eine Kombination der oben genannten? Sie werden sehr unterschiedliche Antworten erhalten, je nachdem, welche davon Ihnen wichtig sind.
function validURL(str) {
var pattern = new RegExp('^(https?:\\/\\/)?'+ // protocol
'((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|'+ // domain name
'((\\d{1,3}\\.){3}\\d{1,3}))'+ // OR ip (v4) address
'(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*'+ // port and path
'(\\?[;&a-z\\d%_.~+=-]*)?'+ // query string
'(\\#[-a-z\\d_]*)?$','i'); // fragment locator
return !!pattern.test(str);
}
www.jayakumar ist es eine gültige URL? es kehrt wahr zurück
– Jayakumar
5. September 2019 um 12:29 Uhr
Ich denke, diese Antwort ist veraltet, schlage vor, sie nicht in der Produktion zu verwenden
– David Konstantin
21. Juni 2020 um 7:34 Uhr
Wenn wir “111111111111111111111111111111111111111111111” als Eingabeserver eingeben, wird der Server hängen. Ich bin auf dieses Problem gestoßen und habe dann meinen Code in str.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2.256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g);
– Epsi95
15. September 2020 um 13:31 Uhr
schlägt bei Bildlinks der Google-Suche fehl: http://www.google.com/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&docid=nIv5rk2GyP3hXM&tbnid=isiOkMe3nCtexM:&ved=0CAUQjRw&url=http%3A%2F%2Fanimalcrossing.wikia.com%2Fwiki%2FLion&ei=ygZXU_2fGKbMsQTf4YLgAQ&bvm=bv.65177938,d.aWc&psig=AFQjCNEpBfKnal9kU7Zu4n7RnEt2nerN4g&ust=1398298682009707
– Bill Davis
23. April 2014 um 0:23 Uhr
das ist unbrauchbar langsam
– Hernán Eche
28. Januar 2015 um 3:00 Uhr
@HernánEche Was meinst du damit schleppend? start = new Date(); isURL("http://michalstefanow.com"); end = new Date(); diff = end - start; console.log(diff) Ich stellte einen Wasserkocher auf, ging aufs Klo, rief meine Mum an und das Ding war im Handumdrehen erledigt…
– Mars Robertson
2. Mai 2016 um 13:59 Uhr
Es kehrt zurück true zum aaa.
– alex naumow
1. Dezember 2016 um 9:13 Uhr
Dies sollte absolut nicht die richtige Antwort sein. Es schlägt viele Testfälle fehl und, was noch wichtiger ist, es hängt Ihre Seite selbst an einer kurzen Zeichenfolge auf: isURL('12345678901234567890123') füge noch ein paar Zeichen hinzu und es ist noch schlimmer.
– ähm
16. April 2018 um 16:51 Uhr
Lukas
Anstatt einen regulären Ausdruck zu verwenden, würde ich empfehlen, ein Ankerelement zu verwenden.
wenn du das einstellst href Eigentum eines anchorwerden verschiedene andere Eigenschaften gesetzt.
Wenn jedoch der Wert href gebunden ist, keine gültige URL ist, dann ist der Wert dieser Hilfseigenschaften die leere Zeichenfolge.
Bearbeiten: Wie in den Kommentaren angegeben: Wenn eine ungültige URL verwendet wird, können die Eigenschaften der aktuellen URL ersetzt werden.
Solange Sie also nicht die URL der aktuellen Seite übergeben, können Sie Folgendes tun:
function isValidURL(str) {
var a = document.createElement('a');
a.href = str;
return (a.host && a.host != window.location.host);
}
Dies ist nicht der Fall (zumindest in Chrome 48). Wenn die URL übergeben wird a.href ist ungültig, parser.host gibt den Hostnamen der Seite zurück, auf der Sie sich gerade befinden, nicht den erwarteten false.
– Sam Beckham
25. Februar 2016 um 15:37 Uhr
Gäh! das ist seltsam. Ich schwöre, ich habe das getestet! Ich denke, es ist fair zu sagen, dass dies nie wirklich auf der aktuellen Seite verwendet werden muss, also kann die Bedingung einfach geändert werden. Ich werde den Beitrag editieren.
– Lukas
25. Februar 2016 um 22:48 Uhr
es ist kein sehr typischer Anwendungsfall, aber diese Technik funktioniert nicht im Kontext des Firefox-Browserfensters (wichtig für die Addon-Entwicklung)
– Chrommod
15. Mai 2016 um 16:01 Uhr
function isValidURL(str): so viel besser als die Verwendung von Regex! Danke!
Ich verwende die folgende Funktion, um die URL mit oder ohne zu validieren http/https:
function isValidURL(string) {
var res = string.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g);
return (res !== null)
};
var testCase1 = "http://en.wikipedia.org/wiki/Procter_&_Gamble";
console.log(isValidURL(testCase1)); // return true
var testCase2 = "http://www.google.com/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&docid=nIv5rk2GyP3hXM&tbnid=isiOkMe3nCtexM:&ved=0CAUQjRw&url=http%3A%2F%2Fanimalcrossing.wikia.com%2Fwiki%2FLion&ei=ygZXU_2fGKbMsQTf4YLgAQ&bvm=bv.65177938,d.aWc&psig=AFQjCNEpBfKnal9kU7Zu4n7RnEt2nerN4g&ust=1398298682009707";
console.log(isValidURL(testCase2)); // return true
var testCase3 = "https://sdfasd";
console.log(isValidURL(testCase3)); // return false
var testCase4 = "dfdsfdsfdfdsfsdfs";
console.log(isValidURL(testCase4)); // return false
var testCase5 = "magnet:?xt=urn:btih:123";
console.log(isValidURL(testCase5)); // return false
var testCase6 = "https://stackoverflow.com/";
console.log(isValidURL(testCase6)); // return true
var testCase7 = "https://w";
console.log(isValidURL(testCase7)); // return false
var testCase8 = "https://sdfasdp.ppppppppppp";
console.log(isValidURL(testCase8)); // return false
Dies ist nicht der Fall (zumindest in Chrome 48). Wenn die URL übergeben wird a.href ist ungültig, parser.host gibt den Hostnamen der Seite zurück, auf der Sie sich gerade befinden, nicht den erwarteten false.
– Sam Beckham
25. Februar 2016 um 15:37 Uhr
Gäh! das ist seltsam. Ich schwöre, ich habe das getestet! Ich denke, es ist fair zu sagen, dass dies nie wirklich auf der aktuellen Seite verwendet werden muss, also kann die Bedingung einfach geändert werden. Ich werde den Beitrag editieren.
– Lukas
25. Februar 2016 um 22:48 Uhr
es ist kein sehr typischer Anwendungsfall, aber diese Technik funktioniert nicht im Kontext des Firefox-Browserfensters (wichtig für die Addon-Entwicklung)
– Chrommod
15. Mai 2016 um 16:01 Uhr
function isValidURL(str): so viel besser als die Verwendung von Regex! Danke!
Fehlt die
http
es ist standardmäßig keine URL.– nfechner
19. April 2011 um 13:29 Uhr
@nfechner das heißt, wenn es kein Protokoll angibt und den Doppelpunkt verwendet (vorzugsweise mit zwei Schrägstrichen als nächstes), dann ist es keine URL?
– jcolebrand
19. April 2011 um 13:30 Uhr
Wie Sie in der lesen können URL-RFC, der einzige Teil, der wirklich notwendig ist, um einen String zu einer gültigen URL zu machen, ist der Doppelpunkt. Gültige URLs sehen so aus:
<scheme>:<scheme-specific-part>
– nfechner
19. April 2011 um 13:34 Uhr
siehe stackoverflow.com/a/3975573/572180
– nguyên
29. Mai 2013 um 1:30 Uhr
So testen Sie, ob etwas eine URL ist höchst kontextabhängig und ohne weitere Qualifizierung zu vage. Spielt es für Sie eine Rolle, ob es der URL-RFC-Spezifikation entspricht, funktioniert, wenn ein OS-Systemaufruf zum Öffnen der URL erfolgt, analysiert als
href
in einem Ankerelement, funktioniert beim Aufrufenwindow.open(url)
, zeigt auf etwas, das wirklich existiert, funktioniert in der Adressleiste des Browsers oder eine Kombination der oben genannten? Sie werden sehr unterschiedliche Antworten erhalten, je nachdem, welche davon Ihnen wichtig sind.– Roy Tinker
18. April 2018 um 18:59 Uhr