Entwicklung

Regex zur Validierung von E-Mail, URL und Telefonnummern

Validierungs-Regex wird häufiger kopiert als jede andere Art, und vieles davon ist subtil falsch. Hier sind Muster, die in echten Formularen funktionieren, was jeder Teil bewirkt und wann ein regulärer Ausdruck das falsche Werkzeug ist.

Fortgeschritten · 8 Min. Lesezeit · Aktualisiert am 30. Oktober 2026

Regex zur Validierung von E-Mail, URL und Telefonnummern

Lose validieren, echt verifizieren

Eine Regex kann dir nur sagen, dass eine Eingabe wie eine E-Mail-Adresse aussieht; erst der Versand einer Nachricht beweist, dass sie existiert. Strenge Muster weisen echte Nutzer ab – etwa mit Plus-Zeichen, langen Domains oder internationalen Namen – lassen aber Tippfehler durch. Ziel sind Muster, die offensichtliche Fehler abfangen, und danach eine echte Prüfung.

E-Mail-Adressen

Ein pragmatisches Muster, das fast jede echte Adresse trifft:

^[^\s@]+@[^\s@]+\.[^\s@]{2,}$

Etwas, ein @, eine Domain mit Punkt und keine Leerzeichen. Es akzeptiert ada+news@example.co.uk und lehnt ada@example sowie ada @example.com ab. Eine etwas strengere Variante für den lokalen Teil:

^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$

Diese lehnt internationalisierte Adressen ab (wie josé@example.com), also nimm besser das erste, wenn deine Nutzer weltweit sind. Im HTML validiert <input type="email"> bereits mit der eigenen Regel des Browsers. Um zu prüfen, ob eine Domain überhaupt Mails empfangen kann, schau den MX-Eintrag mit dem Email DNS Checker nach.

URLs

Schreib keine URL-Regex – parse die URL. Jede moderne Laufzeitumgebung hat einen URL-Parser, der die Regeln kennt:

function isHttpUrl(value) {
  try {
    const u = new URL(value);
    return u.protocol === 'http:' || u.protocol === 'https:';
  } catch {
    return false;
  }
}

Das Prüfen des Protokolls ist wichtig: new URL('javascript:alert(1)') wird fehlerfrei geparst, und dieser String darf niemals in einem href landen. Wenn du eine Regex brauchst, um URLs in Text zu finden, nimm etwas Einfaches und parse jeden Treffer anschließend:

https?:\/\/[^\s<>"']+

Zerlege eine URL mit dem URL Parser in Protokoll, Host, Pfad und Query-Parameter.

Telefonnummern

Telefonformate unterscheiden sich je nach Land, deshalb bereinigt die sicherste Regex nur die Eingabe. Entferne alles außer Ziffern und einem führenden Plus und prüfe dann die Länge nach E.164 (bis zu 15 Ziffern):

const clean = input.replace(/(?!^\+)[^\d]/g, '');
const ok = /^\+?[1-9]\d{6,14}$/.test(clean);

Für eine echte Prüfung nach Land – Vorwahlen, Mobil- vs. Festnetz – nutze eine Bibliothek wie libphonenumber. Ein Muster nur für Nordamerika, falls du ausschließlich das akzeptierst:

^\(?([2-9]\d{2})\)?[-.\s]?(\d{3})[-.\s]?(\d{4})$

Vor dem Einsatz testen

Füge ein Muster mit einer Liste gültiger und ungültiger Beispiele, eine Zeile pro Eintrag, in den Regex Tester ein und aktiviere das Multiline-Flag, damit ^ und $ jede Zeile treffen. Wenn ein geerbtes Muster unlesbar ist, zerlegt der Regex Explainer es Token für Token. Achte auf katastrophales Backtracking: verschachtelte Quantifizierer wie (a+)+ können einen Server bei einer gezielt gebauten Eingabe einfrieren.

Häufige Fragen

Was ist die beste Regex für die E-Mail-Validierung?
Eine einfache: ^[^\s@]+@[^\s@]+\.[^\s@]{2,}$. Komplexe RFC-artige Muster lehnen gültige Adressen ab und können trotzdem nicht beweisen, dass das Postfach existiert – dafür schick eine Bestätigungsmail.
Soll ich URLs mit Regex validieren?
Nein. Nutze den in deiner Sprache eingebauten URL-Parser (new URL() in JavaScript, urllib.parse in Python) und prüfe, ob das Protokoll http oder https ist.
Warum funktioniert meine Regex bei einer Zeile, aber nicht in einer Liste?
Ohne das m-Flag (Multiline) treffen ^ und $ auf Anfang und Ende des gesamten Textes, nicht auf jede einzelne Zeile.

Weiterlesen