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('user@example.com'); // true
emailRegex.test('user@.com'); // 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 (
user@mail.example.co.uk)
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:
user+tag@gmail.com(Plus-Adressierung) oderuser@subdomain.example.comblockieren - 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 â
" user@example.com "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