JS Regex-URL-Validierung

Lesezeit: 3 Minuten

Benutzeravatar von motis10
motis10

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\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/";
        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\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g);
    if(res == null)
        return false;
    else
        return true;
}

  • Sollte sein (http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&=]*) . Überprüfen Sie die obige Regex auf regex101.com gibt Fehler.

    – saruftw

    22. Februar 2017 um 8:47 Uhr

m69 ''snarky and unwelcoming'' Benutzer-Avatar
m69 ”bissig und abweisend”

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:

"^(https?://)?(((www\\.)?([-a-z0-9]{1,63}\\.)*?[a-z0-9][-a-z‌​0-9]{0,61}[a-z0-9]\\‌​.[a-z]{2,6})|((\\d{1‌​,3}\\.){3}\\d{1,3}))‌​(:\\d{2,4})?(/[-\\w@‌​\\+\\.~#\\?&/=%]*)?$‌​"  

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:

"^(https?://)?(((www\\.)?([-a-z0-9]{1,63}\\.)*?[a-z0-9][-a-z‌​0-9]{0,61}[a-z0-9]\\‌​.[a‌​-z]{2,6})|((\\d‌​{1,3}\\.){3}\\d{1,3}‌​))(:\\d{2,4})?((/|\\‌​?)[-\\w@\\+\\.~#\\?&‌​/=%]*)?$"

Um auch sicherzustellen, dass auf jedes % eine Hexadezimalzahl folgt, lautet die Regex:

"^(https?://)?(((www\\.)?([-a-z0-9]{1,63}\\.)*?[a-z0-9][-a-z‌​0-9]{0,61}[a-z0-9]\\‌​.[a-z]{2,6})|((\\d{1‌​,3}\\.){3}\\d{1,3}))‌​(:\\d{2,4})?((/|\\?)‌​(((%[0-9a-f]{2})|[-\‌​\w@\\+\\.~#\\?&/=])*‌​))?$"

(Hinweis: Wie John Wu in einem Kommentar erwähnte, gibt es gültige Einzelbuchstaben-Domains).

Benutzeravatar von AmerllicA
AmerllicA

Eigentlich braucht diese Frage eine mächtige regex und der folgende Code ist nicht sehr schwer zu verstehen, siehe unten (ES6 – TypeScript):

const isValidUrl = (url: string): boolean => {
  const urlRegex = /^((http(s?)?):\/\/)?([wW]{3}\.)?[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,}(\.[a-zA-Z]{2,})?$/g;
  const result = url.match(urlRegex);

  return result !== null;
};

Versuchen Sie diesen Code.

function CheckURL(fieldId, alertMessage) {
    var url = fieldId.value;
    if(url !== "")
    {
        if (url.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g) !== null)
            return true;
        else {
            alert(alertMessage);
            fieldId.focus();
            return false;
        }
    }
}

var website = document.getElementById('Website');
if (!CheckURL(website, "Enter a valid website address")) {
    return false;
}

1442830cookie-checkJS Regex-URL-Validierung

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy