rsc: Überprüfung der E-Mailadresse

Hallo zusammen!

Ich hab einem PHP-Skript eine Überprüfung für bestimmte Felder:

[...]
} elseif(!empty($name) && !empty($email) && !empty($subject) && !empty($body)) {
mail($to, $subject, $body, "From: $name <$email>");
[...]

Nun will ich aber noch prüfen, ob $email ein '@' enthält und einen '.' und mindestens 7 Zeichen lang ist. Wie mach ich dies am besten?

Dass es dafür Funktionen gibt, ist mir bekannt...aber ich weiß nicht, wie ich diese hier einsetzen soll :-(

Viele Grüße und schonmal danke!

Robert

--
Fortschritt ist die Verwirklichung von Utopien!
  1. Hallo, Robert

    Nun will ich aber noch prüfen, ob $email ein '@' enthält und einen '.' und mindestens 7 Zeichen lang ist. Wie mach ich dies am besten?

    Am besten, du überprüfst gleich, ob die Syntax komplett richtig ist. Am besten geht das mit regulären Ausdrücken, es gibt außerdem schon einen Tipp & Trick-Artikel von CK, der sich damit befasst: http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/

    Grüße aus Darmstadt,
    Benjamin

    --
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: sh:) fo:) ch:} rl:| br:> n4:( ie:% mo:) va:) de:> zu:) fl:| ss:) ls[
    1. hi!

      Am besten, du überprüfst gleich, ob die Syntax komplett richtig ist. Am besten geht das mit regulären Ausdrücken, es gibt außerdem schon einen Tipp & Trick-Artikel von CK, der sich damit befasst: http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/email/

      auch wenn rsc keine regexps verwenden will, moechte ich dennoch der vollstaendigkeit halber darauf hinweisen, dass der artikel aufgrund seines alters einen "fehler" aufweist:
      und zwar die tld-abfrage .[a-zA-Z]{2,5} am schluss liefert bei .museum, dass die emailadresse nicht existieren koenne.

      einfache loesung:
      .[a-zA-Z]{2,6}

      genauere aber wartungsunfreundlichere loesung:
      .([a-z]{2}|biz|com|edu|gov|int|net|mil|org|pro|aero|arpa|coop|info|name|museum)

      prost
      seth

      1. Hallo seth,

        und zwar die tld-abfrage .[a-zA-Z]{2,5} am schluss liefert bei .museum, dass die emailadresse nicht existieren koenne.

        Ach, .museum gibt es auch seit neuestem? Das wird ja immer skurriler... ;-)

        einfache loesung:
        .[a-zA-Z]{2,6}

        ich würde diese nehmen, aber wer sagt, dass nicht bald schon wieder eine neue TLD mit mehr als 6 Zeichen "erfunden" wird?

        genauere aber wartungsunfreundlichere loesung: .([a-z]{2}|biz|com|edu|gov|int|net|mil|org|pro|aero|arpa|coop|info|name|museum)

        Ja, sehr wartungsunfreundlich, finde ich auch. Die obere Lösung ist da sicherlich besser, wenngleich sie jede beliebige Buchstabenkombination erlaubt und auch ungültige TLDs auf den RegEx passen.

        Grüße aus Darmstadt,
        Benjamin

        --
        http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
        SELF-Code: sh:) fo:) ch:} rl:| br:> n4:( ie:% mo:) va:) de:> zu:) fl:| ss:) ls[
        1. hi!

          Ach, .museum gibt es auch seit neuestem? Das wird ja immer skurriler... ;-)

          mehr dazu auf http://www.icann.org/tlds/

          aber wer sagt, dass nicht bald schon wieder eine neue TLD mit mehr als 6 Zeichen "erfunden" wird?

          siehe oben

          prost
          seth

        2. Hallo,

          einfache loesung:
          .[a-zA-Z]{2,6}

          ich würde diese nehmen, aber wer sagt, dass nicht bald schon wieder eine neue TLD mit mehr als 6 Zeichen "erfunden" wird?

          Wie wäre es einfach mit {2,} und einem offenen Ende? Und wenn du auf Nummer sicher gehen willst, dann schicke doch einfach eine Anfrage mit dem kompletten Teil hinter dem @ an einen Nameserver und schau nach ob die Domain überhaupt existiert.

          Viele Grüße,

          Stefan

          1. Hallo Stefan,

            Wie wäre es einfach mit {2,} und einem offenen Ende? Und wenn du auf Nummer sicher gehen willst, dann schicke doch einfach eine Anfrage mit dem kompletten Teil hinter dem @ an einen Nameserver und schau nach ob die Domain überhaupt existiert.

            Meiner Ansicht nach viel zu viel Aufwand. Wenn man wirklich feststellen muss, ob eine Adresse existiert, dann soll man halt eine Email mit Bestätigungslink an diese Adresse schicken - eine andere zuverlässige Möglichkeit gibt es nicht.

            Christian

            --
            Hast Du einen Beitrag? Nur her damit!
            http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
            SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
            sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
      2. Nochmal hallo!

        Nun, ich will die RegExp-Lösung gerade aus den oben genannten - und festgestellten - Gründen nicht, weil ich weiß ja nicht, woher meine Benutzer kommen und wo sie ihre E-Mailadresse haben ;-)

        Ich quetsch doch nicht alle TLDs in diese Abfrage!

        Und was ich prüfe, ist ein Minimum eben und täuschen lässt sich die E-Mailadresse immer! Ich weiß, wovon ich spreche *g*

        Viele Grüße,
          Robert

        --
        Fortschritt ist die Verwirklichung von Utopien!
        1. Hallo Robert,

          Ich quetsch doch nicht alle TLDs in diese Abfrage!

          Musst du ja auch gar nicht. Ebenfalls wie oben genannt und festgestellt.

          Und was ich prüfe, ist ein Minimum eben und täuschen lässt sich die E-Mailadresse immer! Ich weiß, wovon ich spreche *g*

          Das ist zwar wahr, aber man sollte IMHO immer das Risiko, falsche Adressen untergejubelt zu bekommen, so weit minimieren wie es nur geht. Und es spricht ja auch absolut _nichts_ gegen eine Verwendung von regulären Ausdrücken, es sei denn, dein Server unterstützt diese nicht (was ich nicht glaube ;-))

          Achja: Der Grund "Ich bin zu faul" gilt nicht. ;-)

          Grüße aus Darmstadt,
          Benjamin

          --
          http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
          SELF-Code: sh:) fo:) ch:} rl:| br:> n4:( ie:% mo:) va:) de:> zu:) fl:| ss:) ls[
  2. Hallo Robert,

    Nun will ich aber noch prüfen, ob $email ein '@' enthält

    if(strstr($email,'@')) //->http://www.php.net/strstr

    und einen '.'

    if(strstr($email,'@'))

    und mindestens 7 Zeichen lang ist. Wie mach ich dies am besten?

    if(strlen($email)>=7) //->http://www.php.net/strlen

    es gibt aber bestimmt noch schönere Methoden eine E-Mailadresse zu überprüfen :-)
    ich verwende jedenfalls eregi("^.{1,}@.{1,}..{1,20}$",$email)...

    Grüße aus Nürnberg
    Tobias

    --
    sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
    1. Hallo Tobias,

      danke für deine Lösung!

      es gibt aber bestimmt noch schönere Methoden eine E-Mailadresse zu überprüfen :-)
      ich verwende jedenfalls eregi("^.{1,}@.{1,}..{1,20}$",$email)...

      Sicher gibt es das, aber ich will mir kein RegExp antun ;-)

      Grüße,
        Robert

      --
      Fortschritt ist die Verwirklichung von Utopien!