Problem bei überprüfen von Mailadressen

jochberger

Mitglied
Hallo und guten Abend!

Ich bin schon den ganzen Abend dabei dabei meine Validierung für mein Formular zu verbessern. Leider komme ich nicht hinter den Fehler bei der Mailadresse.
Folgender Code sollte die Mailadresse prüfen:
PHP:
$lenMail=strlen($Mail);
$LeerzMail=strpos($Mail," ");
if($lenMail>5 and $LeerzMail<1){
	$atvorh=strpos($Mail, "@");
	if($atvorh>2){
		$domain=substr($Mail, $atvorh+1);
		$ip=gethostbyname($domain);
		if($ip!=$domain){
		}
		else {
			$mailok=false;
			$Mail="";
		}
	}
else {
	$mailok=false;
	$Mail="";
}
Die Eingabe von "hans mustermann@hotmail.com" sollte $mailok=false ergeben. Leider bleibt diese auf True.
Ich würde mich sehr über eure Anregungen freuen.
LG
jochberger
 
nimm Dir Regex vor und alles wird gut.
http://bueltge.de/php-regular-expression-schnipsel/917/

Beispiel von der verlinkten Seite
PHP:
$email = "test@example.com";

if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/', $email))
{
	echo 'Die E-Mail ist OK.';
} else {
	echo 'Falsches E-Mail-Format';
}
mfg chmee
 
Guten Morgen!

Danke für deinen Hinweis. Allerdings scheint diese Leerzeichen im string zu ignorieren.
Trotzdem vielen Dank
Lg Jochberger
 
Statt regulären Ausdrücken, kannst du filter_var() in Kombination mit FILTER_VALIDATE_EMAIL verwenden:

PHP:
$email = "hans mustermann@hotmail.com";

if( filter_var($email, FILTER_VALIDATE_EMAIL) )
{
	echo "Adresse ist OK";
}
else
{
	echo "Adresse ist fehlerhaft";
}
 
http://de.wikipedia.org/wiki/E-Mail-Adresse#Der_Lokalteil_.28Local_Part.29

[nachgebessert]sry.

auch Leerzeichen sind erlaubt. Dann muss aber der Local Part in Anführungsstriche gesetzt werden oder escaped.
Code:
--> falsch
hans hausen@web.de

-->richtig
"hans hausen"@web.de

-->nicht sicher, was richtig ist
hans\shausen@web.de
oder
hans%20hausen@web.de

--> mit Adresszusatz siehts so aus
Hans Hausen <"hans hausen"@web.de>
Die Frage ist natürlich, welche Relevanz das Erlauben von Leerzeichen hat, denn
•A das erlaubt viel Blödsinn
•B vor Allem macht es die Validierung unnötig komplex
•C kommen sehr viele Formulare/eMailClients mit einem Leerzeichen nicht klar
•D aufgrund B/C wird es eh vermieden.

mfg chmee
 
Zuletzt bearbeitet:
Ich hab nachgebessert.. mal lesen, ich wusste es auch nicht.

Ich meine, dann packt man eine preg_match() vor der eigentlichen Überprüfung mit dem negierten Zeichenvorrat der erlaubten Zeichen und bei true jener ist das Validating eh abgebrochen.

Im Moment ist das Script eh performanter als die Stringschlacht zu Beginn, oder nicht?

mfg chmee

Nachtrag: Beim Regextester gibt es ein beispiel, welches funktioniert, aber auch ziemlich lang ist :)
http://regexp-tester.mediacix.de/exp/example/
(siehe "Der längste Regex der Welt - E-Mail mit RFC 822 prüfen")
 
Zuletzt bearbeitet:
Mein persönliches Motto: Regex, wo es nötig ist, ansonsten die Capabilities des Systems nutzen :-) FILTER_VALIDATE_EMAIL hat nur eine Unschönheit: user@host (ohne TLD) ist eine gültige Adresse, nämlich eine lokale - es wird aber als fehlerhaft validiert. Ansonsten scheint es die gültigen und ungültigen Adressen korrekt zu identifizieren.

Wie dem auch sei - ein weiterer Punkt auf meiner persönlichen Verbesserungsliste für PHP :-)
 
Zurück