URL Regex Muster
Das obige Muster stimmt mit HTTP und HTTPS URLs überein, einschließlich Pfaden, Abfragezeichenfolgen und Fragmenten. Es lehnt ftp:// Schemata und einfache Strings ohne Protokoll ab. Von den obigen Teststrings stimmt es mit https://example.com, der DevBento Tool URL, der lokalen API mit Abfrageparametern und der Subdomain URL mit Fragment überein. Es stimmt nicht mit ftp://not-http.com oder dem einfachen Textstring überein.
Aufschlüsselung des Musters
| Segment | Muster | Was übereinstimmt |
|---|---|---|
| Protokoll | https?:\/\/ | http:// oder https:// |
| Host | [\w\-]+(\.[\w\-]+)+ | Domainname mit mindestens einem Punkt (z.B. example.com, sub.domain.co.uk) |
| Pfad, Abfrage, Fragment | ([\w.,@?^=%&:/~+#\-]*[\w@?^=%&/~+#\-])? | Optionaler Pfad und Abfragezeichenfolge, darf nicht mit Interpunktion enden |
Die letzte Zeichenklasse ist absichtlich nicht am Ende verankert. Die zweite Zeichenklasse innerhalb der Gruppe ([\w@?^=%&/~+#\-]) stellt sicher, dass die Übereinstimmung nicht an einem abschließenden Punkt oder Komma stoppt, wodurch vermieden wird, Interpunktion zu erfassen, die einer URL in Prosa folgt.
Der URL Konstruktor als Validierungsalternative
Für JavaScript ist new URL(input) die zuverlässigste Methode, um zu überprüfen, ob ein String eine gültige absolute URL ist:
function isValidUrl(str) {
try {
const url = new URL(str);
return url.protocol === 'http:' || url.protocol === 'https:';
} catch {
return false;
}
}
Dies behandelt Grenzfälle, die Regex nicht behandelt: IPv6 Adressen (http://[::1]:8080/), internationalisierte Domainnamen nach Punycode Normalisierung und prozentcodierte Zeichen in Pfaden. Die Protokollprüfung filtert javascript:, data: und andere Schemata, die du wahrscheinlich nicht akzeptieren möchtest.
Grenzfälle, die das Muster Nicht Abdeckt
URLs mit Authentifizierungsdaten (http://user:pass@example.com) werden nicht abgeglichen, weil das @ im Pfadteil des Musters nicht enthalten ist. URLs mit IPv6 Hosts in eckigen Klammern (http://[::1]:8080/path) werden nicht abgeglichen. URLs ohne Pfad (https://example.com) werden korrekt abgeglichen. Daten-URIs (data:text/plain;base64,...) werden nicht abgeglichen, da das Muster nur http/https zulässt.
Teste deine URL Muster mit Live-Ergebnissen im Regex Tester.