Regex für E-Mail-Validierung: Muster, die tatsächlich funktionieren
E-Mail-Validierung ist einer der häufigsten Regex-Anwendungsfälle — und einer der am meisten missverstandenen. Die RFC-5321-Spezifikation für E-Mail-Adressen ist überraschend komplex, und kein einzelner Regex kann sie vollständig validieren. Aber praktische Muster, die 99,9% der realen E-Mail-Adressen abdecken, sind sowohl erreichbar als auch nützlich.
Das einfache Muster (Gut genug)
Für die meisten Anwendungen funktioniert dieses Muster gut:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
Was es trifft: Ein oder mehrere erlaubte Zeichen, gefolgt von @, gefolgt von einer Domain mit mindestens einem Punkt und einer TLD von 2+ Buchstaben.
JavaScript:
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
emailRegex.test('[email protected]'); // true
emailRegex.test('[email protected]'); // false
Testen Sie dieses Muster mit unserem Regex Tester.
Warum perfekte Regex-Validierung unmöglich ist
Die E-Mail-Spezifikation (RFC 5321/5322) erlaubt Strukturen, die gültig, aber in der Praxis im Wesentlichen nie verwendet werden:
"john..doe"@example.com // Quoted local part with consecutive dots
user@[192.168.1.1] // IP address as domain
"very.(),:;<>[]".VERY."very@\ "very".unusual"@strange.example.com
Ein Regex, der alle RFC-gültigen Adressen behandelt, ist Tausende von Zeichen lang und deckt möglicherweise immer noch nicht jeden Grenzfall ab. Der praktische Ansatz: Verwenden Sie einen einfachen Regex für grundlegende Formatvalidierung und verifizieren Sie dann die E-Mail tatsächlich durch Senden einer Bestätigung.
Muster-Aufschlüsselung
Lokaler Teil (vor @)
[a-zA-Z0-9._%+-]+
- Buchstaben (Groß- und Kleinschreibung)
- Ziffern
- Punkte, Unterstriche, Prozent, Plus, Bindestrich
- Ein oder mehrere Zeichen
Häufige Fehler:
- Punkte am Anfang oder Ende erlauben (technisch ungültig)
- Aufeinanderfolgende Punkte erlauben (technisch ungültig ohne Quoting)
- Zu restriktiv sein (gültige Zeichen wie
+für Gmail-Aliase blockieren)
Domain-Teil (nach @)
[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
- Alphanumerische Zeichen, Punkte, Bindestriche
- Mindestens ein Punkt
- TLD von 2+ alphabetischen Zeichen
Häufige Fehler:
- TLD-Länge auf 3-4 Zeichen beschränken (
.museum,.photographyexistieren) - Bindestriche in Domain-Namen nicht erlauben
- Subdomains nicht behandeln (
[email protected])
Bessere Muster
HTML5-Standard
Die HTML5-Spezifikation definiert dieses Muster für <input type="email">:
^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$
Dieses ist im lokalen Teil permissiver und bei Domain-Label-Längen strikter.
Empfohlenes praktisches Muster
^[^\s@]+@[^\s@]+\.[^\s@]{2,}$
Dieses minimale Muster stellt einfach sicher: keine Leerzeichen, ein @, mindestens ein Punkt nach @, TLD von 2+ Zeichen. Es ist bewusst permissiv — offensichtlich falsche Eingaben abfangen, ohne ungewöhnliche, aber gültige Adressen abzulehnen.
Sprachspezifische Implementierung
JavaScript
function isValidEmail(email) {
// Basic regex check
const regex = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/;
if (!regex.test(email)) return false;
// Additional checks
if (email.length > 254) return false; // RFC 5321 limit
const [local] = email.split('@');
if (local.length > 64) return false; // RFC 5321 limit
return true;
}
Python
import re
def is_valid_email(email: str) -> bool:
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
if not re.match(pattern, email):
return False
if len(email) > 254:
return False
local, domain = email.rsplit('@', 1)
if len(local) > 64:
return False
return True
Über Regex hinaus: Richtige E-Mail-Validierung
Regex ist nur die erste Verteidigungslinie. Eine vollständige Validierungsstrategie:
- Formatprüfung (Regex): Offensichtlich ungültige Formate ablehnen
- Längenprüfung: Lokaler Teil ≤ 64 Zeichen, gesamt ≤ 254 Zeichen
- DNS-Prüfung: Überprüfen, ob die Domain MX-Records hat
- Wegwerf-E-Mail-Erkennung: Temporäre E-Mail-Dienste bei Bedarf blockieren
- Bestätigungs-E-Mail: Die einzige Möglichkeit, eine E-Mail wirklich zu verifizieren — eine Nachricht senden und bestätigen, dass der Benutzer sie erhält
// DNS MX record check (Node.js)
const dns = require('dns');
const [, domain] = email.split('@');
dns.resolveMx(domain, (err, addresses) => {
if (err || !addresses.length) {
console.log('Domain has no email server');
}
});
Häufige Fehler vermeiden
- Zu restriktive Muster:
[email protected](Plus-Adressierung) oder[email protected]blockieren - Groß-/Kleinschreibung: E-Mail-Localparts können laut RFC case-sensitive sein, aber in der Praxis als case-insensitive behandeln
- Trimmen: Immer Whitespace vor der Validierung entfernen —
" [email protected] "sollte bestehen - Internationale Domains:
.münchenund用户@例え.jpsind gültig in internationalisierter E-Mail
Für weitere Regex-Muster siehe unseren Regex-Spickzettel.
FAQ
Sollte ich E-Mail mit Regex auf dem Client oder Server validieren?
Beides. Client-seitige Validierung bietet sofortiges Feedback (bessere UX). Server-seitige Validierung ist für die Sicherheit zwingend erforderlich (Client-Prüfungen können umgangen werden). Vertrauen Sie niemals allein auf client-seitige Validierung.
Warum lehnen manche Websites meine gültige E-Mail-Adresse ab?
Zu restriktive Regex-Muster sind die übliche Ursache. Adressen mit + (Gmail-Aliase), langen TLDs (.technology) oder Subdomains werden oft durch schlechte Validierung abgelehnt. Wenn Sie eine Website betreiben, verwenden Sie permissive Regex und verifizieren Sie stattdessen mit einer Bestätigungs-E-Mail.
Verwandte Ressourcen
- Regex Tester — E-Mail-Validierungsmuster in Echtzeit testen
- Regex-Spickzettel — Vollständige Regex-Muster-Referenz
- JSON-Schema-Validierung — E-Mail-Felder in JSON mit format: email validieren
🛠️ Jetzt ausprobieren: Regex Tester — 100% kostenlos, alles wird in Ihrem Browser verarbeitet. Keine Daten hochgeladen.