Bitbull: PHP: E-Mail-Syntax-Prüfung schlägt fehl ...

Hallo,

ich nutze derzeit eine open source php-Anwendung. Dort wird eine User-E-Mail-Eingabe syntaktisch geprüft.

Das funktionierte soweit ganz gut. Jetzt wollte jemand mit einer tatsächlich gültigen E-mail-Adresse nach dem Format vorname.nachname@subdomain.main-domain.tld den Dienst nutzen und erhält die Nachricht, dass diese e-mail ungültig sei.

Es liegt sicherlich daran, dass die e-mail-Adresse eine zusätzliche Subdomain (in diesem Fall mit nur einem Buchstaben) enthält.

Ich habe das Forum durchsucht, finde aber keine passende Information zu meinem Problem. Das liegt aber sicher auch daran, dass ich PHP-Autodidakt bin und zwar die Codingstelle finde, aber die Syntax des Befehls zu komplex ist, als dass ich diese verstehen würde.

Hier ist das Coding:

if(!empty($guest['user_email'])){
    if(!eregi("[1]+@([0-9a-zA-Z][0-9a-zA-Z-]+.)+[a-zA-Z]{2,6}$", $guest['user_email'])){
    $err['user_email']=not_valid_email;
    }
}

Ich gebe nochmal eine dummy-adresse mit gleicher Zeichenanzahl zum besseren Verständnis an: abcdef@a.abcd-abcdefg.ab

Sieht jemand mit seinem professionellen PHP-Auge das Problem für die Abweisung?

Vielen Dank ...

BitBull


  1. _.0-9a-zA-Z- ↩︎

  1. Hallo Bitbull,

    eine sichere Überprüfung, ob es sich un eine gültige E-Mail-Adresse handelt, geht auf diese Weise sowieso nicht. Um nur grobe Tippfehler aufzuspüren, könntest Du einen simpleren regulären Ausdruck verwenden (hier mit preg_match - ist in diesem Fall IMHO günstiger):

    if(!empty($guest['user_email'])){  
        if(!preg_match("/^[^@]+@.+\.\D{2,5}$/", $guest['user_email'])){  
        $err['user_email']=not_valid_email;  
        }  
    }
    

    Grüße
    Alex

    1. Moin!

      eine sichere Überprüfung, ob es sich un eine gültige E-Mail-Adresse handelt, geht auf diese Weise sowieso nicht. Um nur grobe Tippfehler aufzuspüren, könntest Du einen simpleren regulären Ausdruck verwenden (hier mit preg_match - ist in diesem Fall IMHO günstiger):

      Wenn schon simpler, dann bitteschön gleich so simpel, dass künftige Top-Level-Domains nicht hinten runterfallen können.

      if(!preg_match("/[1]+@.+..+$/", $guest['user_email'])){

        
       - Sven Rautenberg
      
      -- 
      "Love your nation - respect the others."
      

      1. ^@ ↩︎

      1. Hallo Sven,

        Wenn schon simpler, dann bitteschön gleich so simpel, dass künftige Top-Level-Domains nicht hinten runterfallen können.

        Einverstanden! Aber kann es zukünftig auch TLDs mit weniger als 2 Zeichen und Nicht-Ziffern geben? Ansonsten ginge vielleicht auch dieser Kompromiss:

        if(!preg_match("/^[^@]+@.+\.\D{2,}$/", $guest['user_email'])) { ... }

        Alex

        1. Hello,

          Einverstanden! Aber kann es zukünftig auch TLDs mit weniger als 2 Zeichen und Nicht-Ziffern geben? Ansonsten ginge vielleicht auch dieser Kompromiss:

          Es könnte zusätzlich interne Mails geben

          user@localhost

          und Localhost kann heißen, wie er will.
          Das Problem hatten wir uns mal gebaut und konnten dann mit unserem tollen Webinterface keine internen Mails mehr versenden, wenn die Internetverbindung mal offline war...

          mMn sollte es genügen, auf das @-Zeichen zu prüfen, und zwar, dass genau eins drinsteht.
          Und dann noch, dass kein Zeilenumbruch vorkommt...

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau

      2. Hallo Sven,

        Wenn schon simpler, dann bitteschön gleich so simpel, dass künftige Top-Level-Domains nicht hinten runterfallen können.

        Nicht nur zukünftige - .museum gibts auch heute schon und hat mehr als fünf Buchstaben.</haarspalt>

        Grüße aus Freiburg,
        Marian

        --
        Microsoft broke Volkswagen's world record: Volkswagen made only 22 million bugs!
        <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->