Dies sind die Droiden, die du suchst. Dies ist ein Auszug aus validator.js welche die Bibliothek ist, die Sie wirklich verwenden sollten, um dies zu tun. Aber wenn Sie Ihr eigenes Programm erstellen wollen, wer bin ich, um Sie davon abzuhalten? Wenn Sie reine Regex wollen, dann können Sie einfach die Längenprüfung herausnehmen. Ich denke, es ist eine gute Idee, die Länge der URL zu testen, wenn Sie wirklich wollen, um die Einhaltung der Spezifikation zu bestimmen.
function isURL(str) {
var urlRegex = '^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$';
var url = new RegExp(urlRegex, 'i');
return str.length < 2083 && url.test(str);
}
Test:
function isURL(str) {
var urlRegex = '^(?!mailto:)(?:(?:http|https|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$';
var url = new RegExp(urlRegex, 'i');
return str.length < 2083 && url.test(str);
}
var check = [
'http://www.foufos.gr',
'https://www.foufos.gr',
'http://foufos.gr',
'http://www.foufos.gr/kino',
'http://werer.gr',
'www.foufos.gr',
'www.mp3.com',
'www.t.co',
'http://t.co',
'http://www.t.co',
'https://www.t.co',
'www.aa.com',
'http://aa.com',
'http://www.aa.com',
'https://www.aa.com',
'www.foufos',
'www.foufos-.gr',
'www.-foufos.gr',
'foufos.gr',
'http://www.foufos',
'http://foufos',
'www.mp3#.com'
];
for (let index = 0; index < check.length; index++) {
var url=check[index]
if (isURL(check[index]))
console.log(`${url} `);
else{
console.log(`${url} `);
}
}
Ergebnis ![enter image description here]()
2 Stimmen
John Gruber's Liberales, genaues Regex-Muster zum Abgleich von URLs ist auch gut. Siehe diese SO-Frage wie man sie für die Arbeit in Javascript modifiziert.
0 Stimmen
"/(http|ftp|https):\/\/[ \w -]+( \. [ \w -]+)+([ \w. ,@?^=%&:\/~+#-]*[ \w @?^=%&\/~+#-])?/"
0 Stimmen
Dies ist für Duplikat markiert, aber diese Frage ist für js fragen und die andere Frage ist nicht für eine js-Lösung fragen
4 Stimmen
Siehe mathiasbynens.be/demo/url-regex
8 Stimmen
(www|http:|https:)+[^\s]+[\w]
0 Stimmen
Hier ist das NPM-Plugin npmjs.com/package/url-regex
3 Stimmen
Das sollte genügen regex101.com/r/S2CbwM/1
0 Stimmen
@jose920405 Ich mag deine erweiterte Regexp, weil sie einfach ist. Ich habe es gerade getestet, es brauchte eine kleine Anpassung, um die
"
in der URL, d. h. :(www|http:|https:)+[^\s"]+[\w]
0 Stimmen
Ich habe eine kleine Anpassung an die Regex von @MukulJain gemacht, um für eine vollständige URL mit einer TLD zu validieren, bevor true zurückgegeben wird, da der andere Ausdruck Teil-URLs validierte:
^(https?:\/\/)\S*\.(\S){2,}
1 Stimmen
Url startet nicht von
www
...0 Stimmen
Oder Sie können dieses Regex-Tutorial lesen - youtube.com/watch?v=TiqXWDyywog
0 Stimmen
/(?:(?:https?)://)(?:localhost|(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))\\.?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i
<-kann mit re2 verwendet werden, diese Lib github.com/neosiae/is-valid-http-url0 Stimmen
Sie verwechseln Protokolle (https) und Domänennamen (www). Außerdem ist zum Beispiel das ftp-Protokoll nicht erlaubt. Schließlich gibt es viele Fälle, die nicht erlaubt sind (http-Authentifizierung, nicht standardmäßiger Port, usw.). Hier ist ein allgemeinerer Vorschlag: regex101.com/r/gCXX9j/1 Er erlaubt die Extraktion von Unterteilen und enthält interne Domänennamen. ^(?:(http?|s?ftp):\/\/|file:\/\/\/)?(([ \P {Cc}]+):([ \P {Cc}]+)@)?([a-zA-Z0-9][a-zA-Z0-9.-]*)(:[0-9]{1,5})?($|\/[ \w\ - \._ ~:\/?[\]@!\$&'\(\)\*\+,;=.]+(\#[ \w ]*)?$)