morpheuz: Problem mit E-Mail Kontrolle (ereg)

Hallo zusammen,

ich möchte gerne die E-Mails verwalten. Der User darf es nur möglich sein den Text vor dem @-Zeichen zu setzen.

Und dieser Text darf keine Sonderzeichen enthalten, ansonsten alles.

Es soll folgendes erlaubt sein:

nachname
vorname.nachname
vorname.nachname-zuname
vorname-vorname2.nachname-zuname

ich habe folgendes probiert:

--------------------------------------------------------------------

if(!ereg("^([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)?$", $_POST['email_neu']) || !ereg("^([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)?$", $_POST['email_neu']) ||  !ereg("^([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)?$", $_POST['email_neu']) || !ereg("^([0-9,a-z,A-Z]+)?$", $_POST['email_neu']))
         {
        echo "<font class='error'>Fehler:</font><font> Bitte
                     korrigieren Sie die eingegebene E-Mail Adresse.<br><br>
        <b>Bitte gehen Sie zur&uuml;ck und korrigieren Sie den Fehler.
        <form action='?action=ReadinessReceiver&do=edit&back=true' method='POST'>
        <input type='hidden' name='email_alt' value='" . $_POST['email_alt'] . "'>
        <input type='hidden' name='email_neu' value='" . $_POST['email_neu'] . "'>
        <input type='image' src='img/zurueck.jpg'>
        </form></b>";
         }

-------------------------------------------------------------------

Das funktioniert leider nicht, denn jetzt kann gar nichts mehr eingegeben werde, er gibt immer an - das die E-Mail falsch ist. Wie wird es richtig gemacht - habt ihr eine Idee?

ciao morpheuz

  1. Moin,

    Und dieser Text darf keine Sonderzeichen enthalten, ansonsten alles.

    Du weisst schon dass beispielsweise "Henryk Ploetz"@ploetzli.ch eine gültige email-Addresse ist?

    if(!ereg("^([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)([.,-])([0-9,a-z,A-Z]+)?$", $_POST['email_neu']) ||

    Der Code ist _viel_ zu umständlich, aber dein Problem scheint einfach zu sein dass du hier && statt || benutzen willst.

    In lang: du meinst offenbar if(!(ereg(...) || ereg(...) || ereg(...) || ereg(...))). Wenn man da die Negation in die Klammer reinzieht, müssen alle || und && vertauscht werden (De Morgan'sche Regeln):  if(!ereg(...) && !ereg(...) && !ereg(...) && !ereg(...)).

    Ich würde übrigens als regexp eher /^(\w+(.\w+(-\w+)?)?)|(\w+-\w+.\w+-\w+)$/ verwenden. (plus/minus x)

    --
    Henryk Plötz
    Grüße aus Berlin
    ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
    ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
    1. Hallo Henryk,

      danke dir - jetzt funktionierts!

      ciao morpheuz

  2. Hallo morpheuz!

    Mit folgendem Pattern sollte sich der Benutzer- bzw. Postfach-Name einer eMail-Adresse nach deinen Wünschen auf Gültigkeit überprüfen lassen (ungetestet):

    "/^([A-Za-z0-9_])+(-[A-Za-z0-9_]+)?(.[A-Za-z0-9_]+(-[A-Za-z0-9_]+)?)?/"

    Bei deinen Vorgaben hast du die Mittelnamen nicht berücksichtig. Ein Name wie "Karl-Heinz Dieter van de Blömches" lässt sich nicht nach deinen Vorgaben Abbilden. Richtig wäre eigentlich folgende Darstellung:
       Karl-Heinz.Dieter.van-de-Blömches@... oder
       Karl-Heinz.Dieter.van.de.Blömches@...

    Noch ein Tipp: Ich würde anstatt der Funktion "ereg()" die Funktion "preg_match()" u. a. wegen den Geschwindigkeitsvorteilen bevorzugen. (Siehe hierzu auch die dclp-FAQ: "8.2. Soll ich ereg() oder preg() verwenden?", http://www.dclp-faq.de/q/q-regexp-ereg.html).

    Grüsse,

    Sky