Lektionen des Moduls (1/4)
E-Mail validieren
Die "korrekte" Validierung einer E-Mail ist ein viel schwierigeres Problem, als es aussieht: RFC 5322 ist ein Monster. In der Praxis wählen wir ein Muster, das gut genug ist, d. h. gängige Fälle akzeptiert und die offensichtlich falschen abweist.
Pattern: ^[\w.+-]+@[\w-]+(?:\.[\w-]+)+$[\w.+-]+-- lokaler Teil: Buchstaben, Ziffern,_,.,+,-.@-- Trennzeichen.[\w-]+(?:\.[\w-]+)+-- Domain + mindestens eine TLD, getrennt durch..
Was es akzeptiert: mario.rossi@example.com, foo+bar@sub.example.co.uk, user_123@test-domain.io.
Was es abweist: mario@, @example.com, mario@example (keine TLD), Leerzeichen.
Kompromisse
Das obige Muster akzeptiert nicht:
- Strings in Anführungszeichen
"strange (things)"@example.com(RFC erlaubt dies). - Domains mit Unicode-Zeichen (
\u00fcber@m\u00fcnchen.de). - Sehr lange TLDs, die
\wnicht erfüllen (z. B. internationalisierte).
Wenn du diese benötigst, erweitere die Klasse mit dem u-Flag auf \p{L} oder delegiere an eine spezialisierte Bibliothek.
Kompromisse und Best Practices für die E-Mail-Validierung
Keine Regex kann garantieren, dass eine E-Mail-Adresse tatsächlich existiert. Zu komplexe Muster beeinträchtigen die Performance und schließen ungewöhnliche, aber gültige Domains aus. Es ist besser, ein einfaches Validierungsmuster zu verwenden, um offensichtliche Tippfehler abzuweisen, und einen Bestätigungscode zu senden.
Probiere es aus
Erkenne jede E-Mail im Text. Verwende ein einfaches Muster: Buchstaben/Ziffern/Punkte vor dem @, Domain mit mindestens einem Punkt.
Hinweis anzeigen
Erweitere den lokalen Teil auf [\w.+-]+ und die Domain auf [\w-]+\.[\w.-]+, um mehrere TLDs zu akzeptieren.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Erfasse die Domain (den Teil nach dem @) jeder E-Mail als benannte Gruppe `dominio`.
Hinweis anzeigen
Schließe den Domain-Teil in eine benannte Gruppe ein: (?<dominio>[\w.-]+).
Lösung nach 3 Versuchen verfügbar
Zusätzliche Herausforderung
Finde den Domain-Teil einer E-Mail (alles nach `@`), und schließe das `@`-Zeichen mittels Lookbehind aus.
Hinweis anzeigen
Verwende ein positives Lookbehind (?<=@) vor der Zeichenklasse der Domain.
Lösung nach 3 Versuchen verfügbar