Moin!
$regexp= "/[1]+[_.0-9a-z-äüöÄÜÖ]@([0-9a-zäüöÄÜÖ]+[0-9a-z-_äüöÄÜÖ].){1,5}(de|com|net|org){1}$/i";
>
> 1. Darf nicht mit -, \_ oder Punkt beginnen
> 2. ein @
> 3. Domain darf nicht mit - oder \_ beginnen, sonst schon.
> 4. 1 bis 5 "Domains / Subdomains" sind zugelassen
> 5. Am Schluss muss eine der angegebenen Endungen vorhanden sein.
>
> Seht Ihr da noch Fehler oder habe ich was vergessen?
> Schließe ich jemanden unbewusst aus, den ich eigentlich nicht ausschließen wollte?
>
> Ich will damit nur den groben Schmutz abfischen und nicht eine valide, existierende E-Mail-Adresse sicherstellen.
Was ist "grober Schmutz" für dich?
Mit diesem Regex schließt du massenhaft gültige Mailadressen aus, weil es logischerweise viel mehr Top-Level-Domains gibt, als du annimmst.
Auf der anderen Seite lässt du z.B. ungültige Domainangaben durch. Der Regex ist also weder zum Filtern geeignet, noch zur Validierung.
Die Sache ist eigentlich relativ simpel:
"Gültig" und zur weiteren Verwendung freigegeben ist eine Mailadresse erst dann, wenn man an diese Adresse einen Validierungslink gesendet hat, und der vom Mailempfänger aktiv geklickt wurde. Solange das nicht der Fall ist, ist die Mailadresse invalide und nicht benutzbar.
Um zu verhindern, dass User mit allzu blöden Tippfehlern eine von vornherein nicht funktionierende Mailadresse eingeben, kann man als Check der Eingabe ein einfaches Muster anwenden: Irgendwelche Zeichen, dann ein "@", dann irgendwelche Zeichen, ein "." und wieder irgendwelche Zeichen.
Als Regex: .+@.+\..+
Ohne "@" ist die Adresse keine im Internet nutzbare Adresse, und ohne mindestens einem Punkt hinter dem "@" ebenfalls nicht.
- Sven Rautenberg
0-9a-zäüöÄÜÖ ↩︎