11 Stimme

PHP: Ist Eingabe eine korrekte E-Mail-Adresse?

Frage von Compi | 03.05.2015 um 18:00

Ich habe ein Formular, in das ein Nutzer seine E-Mail-Adresse eintragen kann. In meinem PHP-Skript würde ich nun gerne überprüfen, ob der Nutzer auch wirklich eine richtige und korrekte E-Mail-Adresse oder irgendetwas anderes angegeben hat.

Gibt es irgendeine Funktion, mit der man mit PHP E-Mail-Adressen validieren kann?

AntwortenPositivNegativDatumStimmen
Avatar
4Beste Antwort4 Stimmen

Ab der PHP-Version 5.2.0 gibt es die praktische Funktion filter_var(), die unter anderem dafür benutzt werden kann, um E-Mail-Adressen zu validieren.

Hier ist ein Beispiel:

$s = 'test@example.com';

if (filter_var($s, FILTER_VALIDATE_EMAIL)) {
   echo "$s ist eine gültige E-Mail Adresse!";
} else {
   echo "$s ist keine gültige E-Mail Adresse!";
}

Als erstes Argument übergibt man die zu testende Adresse, als zweites Argument FILTER_VALIDATE_EMAIL. Das Result von filter_var() ist TRUE falls der übergebene String eine gültige E-Mail-Adresse war, ansonsten FALSE.
04.05.2015 um 15:43

AntwortenPositiv Negativ
Avatar
00 Stimmen

Ich empfehle auch filter_var() zum Überprüfen von E-Mail-Adressen zu nehmen. Solltest du noch eine ältere Version von PHP benutzen, bist du natürlich dennoch dazu gezwungen, mit der Hilfe von einem regulären Ausdruck zu prüfen.

Ein regulärer Ausdruck wie beispielsweise "#[a-zA-Z0-9_-.+]+@[a-zA-Z0-9-]+.[a-zA-Z]+#" ist natürlich schnell konstruiert, wird aber dennoch in vielen Fällen fehlschlagen.

PHP selber (siehe hier) benutzt einen recht komplizierten regulären Ausdruck, den ich in dem folgenden Beispielcode demonstriere.

$reg = "/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD";

$email = 'test@example.com';

if (preg_match($reg, $email)) {
    // gültig
}

Zu dem regulären Ausdruck gibt es unter dem angegebenen Link noch folgenden Copyright Hinweis:

The regex below is based on a regex by Michael Rushton.

However, it is not identical. I changed it to only consider routeable addresses as valid. Michael's regex considers a@b a valid address which conflicts with section 2.3.5 of RFC 5321 which states that:

Only resolvable, fully-qualified domain names (FQDNs) are permitted when domain names are used in SMTP. In other words, names that can be resolved to MX RRs or address (i.e., A or AAAA) RRs (as discussed in Section 5) are permitted, as are CNAME RRs whose targets can be resolved, in turn, to MX or address RRs.  Local nicknames or unqualified names MUST NOT be used.

This regex does not handle comments and folding whitespace. While this is technically valid in an email address, these parts aren't actually part of the address itself.

Michael's regex carries this copyright:

Copyright © Michael Rushton 2009-10

http://squiloople.com/

Feel free to use and redistribute this code. But please keep this copyright notice.
04.05.2015 um 23:28

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Wie man Spam Mails vermeidet

Tipp | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.