Ich habe versucht, die URL mit oder ohne http zu validieren. Egal was ich getan habe, die Funktion gibt false zurück. Ich habe meine Regex-Zeichenfolge auf dieser Seite überprüft: http://regexr.com/
Und es wird so gesehen, wie ich es erwarte.
function isUrlValid(userInput) {
var regexQuery = "/(http(s)?://.)?(www\.)?[[email protected]:%._\+~#=]{2,256}\.[a-z]{2,6}\b([[email protected]:%_\+.~#?&//=]*)/";
var url = new RegExp(regexQuery,"g");
if (url.test(userInput)) {
alert('Great, you entered an E-Mail-address');
return true;
}
return false;
}
Ich behebe das Problem, indem ich .test in .match ändere und die Regex unverändert lasse.
Ich ändere die Funktion auf Match + mache hier eine Änderung mit den Schrägstrichen und ihrer Arbeit: (http(s)?://.)
Die feste Funktion:
function isUrlValid(userInput) {
var res = userInput.match(/(http(s)?:\/\/.)?(www\.)?[[email protected]:%._\+~#=]{2,256}\.[a-z]{2,6}\b([[email protected]:%_\+.~#?&//=]*)/g);
if(res == null)
return false;
else
return true;
}
Ich glaube, die andere Antwort wird einige gültige URLs (wie Domainnamen in Großbuchstaben oder lange Subdomains) ablehnen und einige ungültige zulassen (wie http://www.-beispiel-.com oder www.%@&.com). Ich habe versucht, einige zusätzliche URL-Syntaxregeln zu berücksichtigen (ohne in die Internationalisierung einzusteigen).
function isUrlValid(userInput) {
var regexQuery = "^(https?://)?(www\\.)?([-a-z0-9]{1,63}\\.)*?[a-z0-9][-a-z0-9]{0,61}[a-z0-9]\\.[a-z]{2,6}(/[-\\w@\\+\\.~#\\?&/=%]*)?$";
var url = new RegExp(regexQuery,"i");
return url.test(userInput);
}
var input = ["https://o.sub-domain.example.com/foo/bar?foo=bar&boo=far#a%20b",
"HTTP://EX-AMPLE.COM",
"example.c",
"example-.com"];
for (var i in input) document.write(isUrlValid(input[i]) + ": " + input[i] + "<br>");
Um auch IP-Adressen und Portnummern zuzulassen, lautet die Regex:
Um auch Abfragezeichenfolgen ohne Schrägstrich zwischen dem Domainnamen und dem Fragezeichen zuzulassen (was theoretisch nicht erlaubt ist, aber in den meisten realen Situationen funktioniert), lautet die Regex: