E-Mail-Adressen mit Regex validieren — JavaScript-Beispiele
Die Validierung von E-Mail-Adressen ist eine der häufigsten Aufgaben in der Webentwicklung. Und gleichzeitig eine der am häufigsten falsch implementierten. Zu strikte Muster lehnen gültige Adressen ab, zu lockere akzeptieren ungültige. Dieser Artikel zeigt bewährte Regex-Patterns für die E-Mail-Validierung in JavaScript, erklärt ihre Logik und zeigt, wie man sie mit dem WikiPlus Regex-Tester vor der Verwendung gründlich testen kann.
Warum E-Mail-Validierung mit Regex schwierig ist
Der offizielle Standard für E-Mail-Adressen (RFC 5321 und RFC 5322) ist überraschend komplex. Technisch gültige E-Mail-Adressen können Zeichen enthalten, die viele Entwickler nicht erwarten: Anführungszeichen im lokalen Teil ("user.name"@example.com), Klammern, eckige Klammern in der Domain oder sehr lange Domains. Gleichzeitig soll die Validierung echte Tippfehler wie fehlende Domain oder fehlendes @ abfangen. Das führt zu einem Kompromiss: Ein Regex, der alle RFC-konformen Adressen akzeptiert, wäre so komplex, dass er schwer wartbar wäre. Für die meisten praktischen Zwecke reicht ein vernünftiger Kompromiss-Regex, der 99% der realen E-Mail-Adressen korrekt behandelt und offensichtliche Fehler abfängt.
Bewährte Regex-Patterns für E-Mail-Validierung
Hier sind drei Ansätze mit unterschiedlichem Komplexitätsniveau. Einfach (für die meisten Projekte ausreichend): /^[^\s@]+@[^\s@]+\.[^\s@]+$/ — lokaler Teil, @, Domainname, Punkt, TLD, keine Leerzeichen. Mittel (mit strikteren Regeln): /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/ — erlaubt gängige Zeichen im lokalen Teil, mindestens zweistellige TLD. Strikt (nah am Standard): /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/i. Alle drei lassen sich im WikiPlus Regex-Tester mit realen Beispielen testen.
Häufige Fehler bei der E-Mail-Regex-Validierung
Einige typische Fehler bei der Implementierung von E-Mail-Validierung mit Regex. Fehlende case-insensitivity: Ohne das i-Flag werden Großbuchstaben in der Domain nicht akzeptiert, obwohl sie technisch gültig sind. Zu strenge TLD-Validierung: Manche Muster erlauben nur TLDs bis 4 Zeichen und scheitern an .museum oder .photography. Zu strenge Zeichenbeschränkungen: Manche internationalen E-Mail-Adressen enthalten Unicode-Zeichen, die standardmäßige ASCII-Regex nicht akzeptiert. Fehlende Gesamtlängenbegrenzung: RFC 5321 begrenzt E-Mail-Adressen auf 254 Zeichen, was Regex allein nicht prüft. Verlass auf Regex als einzige Validierung: Eine bestandene Regex-Prüfung bedeutet nicht, dass die Adresse existiert. Für kritische Anwendungen sollte immer eine Bestätigungs-E-Mail versendet werden.
Regex-Validierung in HTML5 und JavaScript-Formularen
In modernen Webformularen gibt es mehrere Ebenen der E-Mail-Validierung. HTML5 <input type="email"> bietet eingebaute Validierung ohne Regex. Für benutzerdefinierte Validierungsfehler und komplexere Regeln kommt JavaScript ins Spiel. Mit dem pattern-Attribut in HTML kann ein Regex direkt im HTML definiert werden: <input type="text" pattern="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}">. In JavaScript verwendet man test(): const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; const isValid = emailRegex.test(emailAddress). Wichtig: Client-seitige Validierung ist nur UX-Verbesserung, nicht Sicherheitsmaßnahme. Serverseitige Validierung bleibt zwingend erforderlich.
Häufig gestellte Fragen
- Reicht Regex-Validierung aus, um sicherzustellen, dass eine E-Mail-Adresse existiert?
- Nein. Regex kann nur die Syntax prüfen, nicht die Existenz. Eine Adresse wie test@example.com besteht jede Regex-Prüfung, existiert aber nicht unbedingt. Für echte Verifikation ist immer ein Bestätigungslink per E-Mail notwendig.
- Wie validiere ich E-Mails mit internationalisierten Domains (IDN) wie münchen.de?
- Internationalisierte Domains werden im DNS als Punycode gespeichert (xn--mnchen-3ya.de). Für die Validierung sollte man entweder den Punycode prüfen oder eine Bibliothek wie validator.js verwenden, die IDN unterstützt.
- Warum gibt es keinen universell richtigen E-Mail-Regex?
- Weil der offizielle RFC-Standard sehr komplex ist und in der Praxis selten vollständig implementiert wird. Der beste Ansatz ist, einen pragmatischen Regex zu wählen, der die eigene Zielgruppe abdeckt, und ihn gründlich mit realen Testdaten zu validieren.