markus erle: RegEx für E-Mail-Adressen

Hallo

Ich versuche mich gerade an einem Skript für ein Gästebuch. Dort will ich die Richtigkeit von E-Mail-Adressen überprüfen lassen:

  
if(preg_match("/[a-zA-Z0-9]{1,25}@[a-zA-Z0-9]{1,25}\.[a-zA-Z]{3}/", $email)==false || empty($email)){  
 echo "Email-Adresse nicht nach dem Muster oder leer.";  
}  

Was ist daran falsch?

Merci
markus

  1. Hi,

    Was ist daran falsch?

    das Format von eMail-Adressen ist sehr(!) viel komplexer, als Du Dir es hier wünschst. Unter http://www.cpan.org/authors/Tom_Christiansen/scripts/ckaddr.gz findest Du ein Perl-Script, welches u.a. auch eine RFC-822-konforme Regular Expression enthält. Ferner ist Deine Problembeschreibung falsch: Sie existiert nicht.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Abend

      Was ist daran falsch?

      das Format von eMail-Adressen ist sehr(!) viel komplexer, als Du Dir es hier wünschst.

      Deshalb gehe ich davon aus, dass die E-Mail-Adressen in folgenden Mustern vorliegen (wie eigentlich die meisten auch sind):

      manfred@mustermann.de
      manfred.mustermann@anbieter.de
      manfred-mustermann@anbieter.de
      manfred_mustermann@anbieter.de
      manfredmustermann@anbieter.de

      Und just in diesem Augenblick (*grins*) fällt mir ein Fehler in meinem RegExp auf. Ich habe das Trennzeichen nicht berücksichtigt. Folgender RegExp wäre das dann jetzt:

      if(preg_match("/[a-zA-Z0-9]{1,25}*[a-zA-Z0-9]{1,25}@[a-zA-Z0-9]{1,25}.[a-zA-Z]{3}/", $email)==false || empty($email)){
       echo "Email-Adresse nicht nach dem Muster.";
      }

      Wäre der jetzt richtig?

      Und zu der Problembeschreibung: Die ist doch klar - Wie muss ich meinen RegExp umstellen, so dass er das macht was ich will, nämlich falsche E-Mail-Adressen rausfiltern.

      Danke
      markus

      1. Hallo Markus,

        manfred@mustermann.de
        manfred.mustermann@anbieter.de
        manfred-mustermann@anbieter.de
        manfred_mustermann@anbieter.de
        manfredmustermann@anbieter.de

        es gibt aber auch sowas wie @fh-stadtxy.de (bzw. @uni-stadtxy.de) oder @subdomain.example.com oder ...

        /[a-zA-Z0-9]{1,25}*[a-zA-Z0-9]{1,25}@[a-zA-Z0-9]{1,25}.[a-zA-Z]{3}/
        Wäre der jetzt richtig?

        nein. Zum einen weiß ich nicht, was mit dem * passieren soll (ich bin jetzt zu faul noch auszuprobieren was da genau passiert, aber so wie das dasteht ist das imho falsch) - und zum Anderen lässt du nur Endungen mit genau 3 Zeichen zu - es gibt aber auch welche die kürzer (z.B. .de oder .at) bzw. länger (z.B. .info oder .museum) sind (von Umlautdomains die es theoretisch auch noch gibt mal ganz zu schweigen).

        Und zu der Problembeschreibung: Die ist doch klar - Wie muss ich meinen RegExp umstellen, so dass er das macht was ich will, nämlich falsche E-Mail-Adressen rausfiltern.

        Wie Cheatah schon schrieb: E-Mailadressen zu prüfen ist nicht so einfach. Entweder du verwendest die von Cheatah vorgeschlagene Lösung oder du baust ein ganz einfaches Muster (in der Adresse muss ein @ vorkommen und irgendwo dahinter ein Punkt) - alles andere ist imho Unsinn.

        Grüße aus Nürnberg
        Tobias

      2. hi,

        Wäre der jetzt richtig?

        nein.

        "Dies ist eine gueltige E-mail-Adresse"@example.org

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      3. Hi,

        das Format von eMail-Adressen ist sehr(!) viel komplexer, als Du Dir es hier wünschst.
        Deshalb gehe ich davon aus, dass die E-Mail-Adressen in folgenden Mustern vorliegen (wie eigentlich die meisten auch sind):

        weil das Format komplex ist, machst Du es lieber falsch? Das verstehe ich nicht.

        manfred@mustermann.de
        manfred.mustermann@anbieter.de
        manfred-mustermann@anbieter.de
        manfred_mustermann@anbieter.de
        manfredmustermann@anbieter.de

        manfred.justin.mustermann@anbieter.de
        manfred.von.droste-huelshoff@anbieter.de
        manfred-from-ElPuebloDeNuestraSenoraLaReinaDeLosAngelesDePorciuncula@anbieter.de (Das ist übrigens der volle Name der Stadt L.A.)
        "And you forgot to look @ RFC 2822!"@anbieter.de

        Folgender RegExp wäre das dann jetzt:

        Ich habe schon viele RegExp gesehen, die angeblich auf eMail-Adressen matchen sollen; alle bis auf eine mehr oder weniger schlecht. Damit sich Deine in den weniger schlechten wiederfinden kann, muss sie noch überarbeitet werden. Ich frage mich aber, warum Du es dann nicht gleich richtig machen willst.

        Wäre der jetzt richtig?

        Nei-en.

        Und zu der Problembeschreibung: Die ist doch klar

        Nein. Dir vielleicht.

        Wie muss ich meinen RegExp umstellen, so dass er das macht was ich will, nämlich falsche E-Mail-Adressen rausfiltern.

        Ich habe Dir einen vollständigen Code verlinkt, der diese und andere diesbezügliche Aufgaben erfüllt.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. hi,

          manfred-from-ElPuebloDeNuestraSenoraLaReinaDeLosAngelesDePorciuncula@anbieter.de (Das ist übrigens der volle Name der Stadt L.A.)

          Schon übel, auf was für Emailadressen man manchmal ausweichen muss, wenn die Wunschdomain schon weg ist (obwohl sie in diesem Falle zum Verkauf steht - also, nichts wie ran, Manfred!)

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hi,

            manfred-from-ElPuebloDeNuestraSenoraLaReinaDeLosAngelesDePorciuncula@anbieter.de (Das ist übrigens der volle Name der Stadt L.A.)
            Schon übel, auf was für Emailadressen man manchmal ausweichen muss, wenn die Wunschdomain schon weg ist

            ja, obwohl ich Manfred in diesem Fall eher einen Anbieter in Lao empfehlen würde.

            Cheatah

            --
            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
        2. Hello,

          manfred@mustermann.de
          manfred.mustermann@anbieter.de
          manfred-mustermann@anbieter.de
          manfred_mustermann@anbieter.de
          manfredmustermann@anbieter.de
          manfred.justin.mustermann@anbieter.de
          manfred.von.droste-huelshoff@anbieter.de
          manfred-from-ElPuebloDeNuestraSenoraLaReinaDeLosAngelesDePorciuncula@anbieter.de (Das ist übrigens der volle Name der Stadt L.A.)
          "And you forgot to look @ RFC 2822!"@anbieter.de

          thomas.schmieder@imhause
            "Thomas Schmieder" ts@hier

          Keep ist simple!

          Das einzige, was Du auf jeden Fall prüfen solltest: Steckt genau ein '@' im Namen?
          BTW: es handelt sich um eMail-Namen und nicht um Adressen. ;-)

          Das prüfen auf genau ein @ verhindert z.B. auch wirksam den Missbrauch als Multimailer. Dann kann man sich mMn sogar prüfen, ob übliche Trennzeichen (Komma, Semikolon) und Zeilenumbrüche vorhanden sind. Das müsstest Du nämlich bei Deiner RegExp sonst auf jeden Fall berücksichtigen, damit sie nicht nur den ersten Teil (erste Zeile) prüft und hintdran kommt dann der Spam-Schwanz.

          Harzliche Grüße vom Berg
          esst mehr http://www.harte-harzer.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
        3. Hi,

          manfred-from-ElPuebloDeNuestraSenoraLaReinaDeLosAngelesDePorciuncula@anbieter.de (Das ist übrigens der volle Name der Stadt L.A.)

          Andersherum geht es auch:

          joerglorenz@abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijk.com

          Es gibt viele Formmailer, die die Eingabe dieser Adresse nicht zulassen.

          Viele Grüße

          Jörg