RegEx: eMail validieren
Oft gebraucht, oft diskutiert. Hier mal ein paar Ansätze von Regulären Ausdrücken um eMail Adressen zu validieren.
Die einfache Variante:
$pattern = '/^\S+@\S+$/i'; preg_match($pattern, $email, $array);
Die einfache Validierung prüft nur ob die eMail Adresse ein @-Zeichen und keinen Whitespace enthält.
Zeichen Einschränken:
$pattern = '/^[A-Z0-9+_.-]+@[A-Z0-9.-]+$/i'; preg_match($pattern, $email, $array);
Hier beschränken wir die Zeichen im Benutzernamen sowie in der Domain.
Nach RFC 2822:
$pattern = '/^[\w!#$%&'*+/=?`{|}~^.-]+@[A-Z0-9.-]+$/i'; preg_match($pattern, $email, $array);
Der Pattern enthält alle Zeichen welche in der RFC 2822 festgehalten sind, hier muss allerdings aufgepasst werden, da hier Zeichen enthalten sind welche beim abspeichern ein Sicherheitsrisiko darstellen.Zudem unterstützen manche eMail Clients diverse Zeichen nicht.
Auf den “Punkt” gebracht:
$pattern = '/^[\w!#$%&'*+/=?`{|}~^-]+(?:\.[\w!#$%&'*+\/=?`{|}~^-]+)*@[A-Z0-9-]+(?:.[A-Z0-9-]+)*$/i'; preg_match($pattern, $email, $array);
Domain- und Benutzername dürfen mehrere “Punkte” enthalten, aber keine zwei aufeinander folgende.
Domain weiter Einschränken:
$pattern = '/^[\w!#$%&'*+/=?`{|}~^-]+(?:\.[\w!#$%&'*+\/=?`{|}~^-]+)*@(?:[A-Z0-9-]+.)+[A-Z]{2,6}$/i'; preg_match($pattern, $email, $array);
Der Domainname muss aus mindestens einem Zeichen bestehen, die TLD muss zwischen zwei und sechs Zeichen enthalten.
So, mit diesem Regulärem Ausdruck kann man die Syntax einer eMail Adresse validieren, allerdings weiss man dann immer noch nicht ob es die eMail auch wirklich gibt!
Links zum Thema:
PHP Regular Expression Schnipsel
Tutorial Regular Expressions – eine Einführung
