E-Mail Kontrolle in Formular

smyle

Erfahrenes Mitglied
Hallo :)

Ich habe diesen Code kopiert um die eingegebenen E-Mail Adressen meines Formulares zu überprüfen.


$checkemail = eregi( "^" .
"[a-z0-9]+([_\\.-][a-z0-9]+)*". //user
"@". //@ zeichen
"([a-z0-9]+([\.-][a-z0-9]+)*)+". //domain
"\\.([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|nato|net|org|pro)" . //sld, tld
"$", $_POST['email']);

if (!$checkemail)
{
echo "<p>Bitte eine korrekte Email Adresse eingeben.</p>";
}
else{ //In Datenbank schreiben}


Nun ist das so: Egal was für eine E- Mail Adresse ich eingebe, kommt immer die Fehlermeldung das es eine falsche ist.

Auch wenn ich meine richtige Adresse eingebe, kommt dieses echo. ( Ich meine: Meine E-Mail gibt es ja wirklich, dann sollte es die Normen erfüllen, und wenn der Code richtig wäre würde er das auch als richtig erkennen. Oder nicht?)

Wie muss ich das umschreiben?
Oder hat mir jemand einen besseren Code der funktioniert und ich anwenden könnte?

Grüsse an alle und noch einen schönen Tag.
:)
 
Danke! aber...

müste ich das wie folgt schrieben?


if ($_POST['MailAdresse'] != "")
{

var_dump(filter_var('[a-z0-9]+([_\\.-][a-z0-9]+)*', FILTER_VALIDATE_EMAIL));
var_dump(filter_var('@', FILTER_VALIDATE_EMAIL));
etc.

}

else {
//Daten in datenbank überschreiben
}

Ich verstehe diesen filter nicht so ganz.

Geht es lange es zum erklären oder kanns du mir dach kurz erklären.
Weisst du ich bin nicht so gut in PHP, oder anders gesagt ich kann das eigentlich garnicht richtig. :S
SRY
 
Danke

Habe eine andere lösung gefunden, falls diese jemandem interessiert, hier habt ihr sie:


$checkemail = eregi( "^" .
"[a-z0-9]+([_\\.-][a-z0-9]+)*". //user
"@". //@ zeichen
"([a-z0-9]+([\.-][a-z0-9]+)*)+". //domain
"\\.([a-z]{2}
|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|nato|net|org|pro|ch|it|es)" .
"$", $_POST['MailAdresse']);

if ($checkemail === false)
{
echo "<p>Bitte eine korrekte Email Adresse eingeben.</p>";
}
else{
//Weiter
}
 
Dein RegExp arbeitet aber nicht nach dem Standard der RFC.

PHP:
$mail = 'fred+ginger@slashdot.org';

$checkemail = eregi( "^" .
"[a-z0-9]+([_\\.-][a-z0-9]+)*". //user
"@". //@ zeichen
"([a-z0-9]+([\.-][a-z0-9]+)*)+". //domain
"\\.([a-z]{2}
|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|nato|net|org|pro|ch|it|es)" .
"$", $mail);

var_dump($checkemail);

Oben ist eine gültige E-Mailadresse, er sagt sie wäre falsch.
Das gleiche für fred&ginger@slashdot.org. *@domain.com oder --#@domain.com funktionieren auch nicht.

Ein Beispiel mit [phpf]filter_var[/phpf] (arbeitet ziemlich nah am RFC):

PHP:
$mail = 'fred+ginger@slashdot.org';
if(filter_var($mail, FILTER_VALIDATE_EMAIL) !== false)
{
  // Adresse ist valide
}

So einfach kann das gehen.
 
Hallo ich habe diesen Forumeintrag gefunden und habe danach dies auch getestet.
es hat gut funktioniert.

Jedoch habe ich einen anderen Eintrag gefunden:
Code:
	if(document.gaestebuchform.Mail.value != "")
	{		
            MailRegExp = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.([a-z]){2,4})$/;
            var err_mail='Mail addres incorect!';
			
            if(MailRegExp.test(document.getElementById("mail").value)){
                alert('true');
                return true;
            }
			else
			{
                alert(err_mail);
                return false;
            }
	}

Nun meine Frage:
Wie kann ich die folgenden einträge in im JS Code ergänzen?

Code:
			$checkemail = eregi( "^" . 
               "[a-z0-9]+([_\\.-][a-z0-9]+)*".       //user 
               "@".                    //@ zeichen 
               "([a-z0-9]+([\.-][a-z0-9]+)*)+".      //domain 
         "\\.([a-z]{2}|aq|ar|as|at|au|aw|az|ax|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ci|ck|cl|cm|cn|co|cr|cs|cu|c																																																																																																																						v|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|et|eu|fi|fj|fk|fm|o|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo
|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru
|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us
|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw|su|jobs|travel|xxx|aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|nato|net|org|pro|ch|it|es)" .    //sld, tld 
               "$", $_POST['Mail']);

Kann mir jemand helfen?
 
Schlechter Ansatz mit den hardcodierten Domain-endungen. Jedesmal den Code anpassen wenn eine neue Endung aufgeschaltet wird....

Zudem sind alle 2-stelligen Endungen bereits mit dem [a-z]{2} abgedeckt (der | gilt als oder -> http://de3.php.net/manual/de/regexp.reference.verticalbar.php)

Code:
[a-z0-9]+([_\\.-][a-z0-9]+)*
bringt nicht wirklich viel.

geh mal von einem einfachen Beispiel und versuche es auszubauen.
Code:
([^@]+)@([a-z0-9\-]+)\.([a-z]{2,4})
Die folgenden 2 Links helfen mir bei sowas jeweils
http://www.spaweditor.com/scripts/regex/index.php
http://de3.php.net/manual/de/regexp.introduction.php

Zu deiner Frage: JS-Code ist nicht PHP -> falsches Unterforum.
 
Warum will man da immer zwanghaft auf reguläre Ausdrücke ausweichen, wenn PHP das mittlerweile doch schon mitbringt?

PHP:
$mail = 'fred+ginger@slashdot.org';
if(filter_var($mail, FILTER_VALIDATE_EMAIL) !== false)
{
  // Adresse ist valide
}
[phpf]filter_var[/phpf]
 
Zurück