Ankündigung

Einklappen
Keine Ankündigung bisher.

eMail-Adresse auf Korrektheit überprüfen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • eMail-Adresse auf Korrektheit überprüfen

    Mit folgendem regulären Ausdruck kann man überprüfen, ob eine eMail-Adresse, die in einem Formular oder so eingegeben wurde, zumindest vom Aufbau her (hat es ein @ etc) korrekt ist:

    Code:
    ^[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)*\@[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)+$
    Das ganze einfach mit PHP: preg_match - Manual oder mit PHP: eregi - Manual auf den String mit der eMail-Adresse anwenden und schauen, ob true oder false rauskommt!

    Gruss


  • #2
    Hallo Montellese

    Es gibt dazu eine fertige Funktion

    PHP-Code:
    function check_email($email) {
        if(!
    ereg("^[^@]{1,64}@[^@]{1,255}$"$email)) {
            return 
    false;
        }
        
    $email_array explode("@"$email);
        
    $local_array explode("."$email_array[0]);
        for (
    $i 0$i sizeof($local_array); $i++) {
            if(!
    ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$"$local_array[$i])) {
                return 
    false;
            }
        }
        if(!
    ereg("^\[?[0-9\.]+\]?$"$email_array[1])) {
            
    $domain_array explode("."$email_array[1]);
            if(
    sizeof($domain_array) < 2) {
                return 
    false;
            }
            for(
    $i 0$i sizeof($domain_array); $i++) {
                if(!
    ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$"$domain_array[$i])) {
                    return 
    false;
                }
            }
        }
        return 
    true;

    Nun die Überprüfung
    PHP-Code:

    if(check_email($email) == false
            {
    // Mail Adresse fehlerhaft
            
    }
    else
            {
    // Mail Adresse valid

    Kommentar


    • #3
      Naja die ist aber ziemlich lange ^^

      PHP-Code:
      function check_email($email)
      {        
          if(
      preg_match('/^[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)*\@[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)+$/i'$email) return true;
          
          return 
      false;

      Es frag sich nur, ob es sich für diese eine if-Abfrage lohnt, extra eine Funktion zu definieren! Deshalb hab ich einfach die RegExp angegeben!

      Und die Aussage "Es gibt dazu eine fertige Funktion" heisst für mich eigentlich, dass es eine fixe PHP Funktion gibt, die man nicht selber definieren muss! Natürlich "gibt es dazu eine fertige Funktion", wenn ich sie selber geschrieben habe ^^ aber von dieser fertigen Funktion hat einer, der sich PHP gerade runtergeladen und installiert hat, nichts....
      Aber is ja eigentlich egal ^^ Jetzt kann man zwischen 2 Scripts aussuchen

      EDIT: Btw, deine Überprüfung wird einen Fehler ausgeben, da die Funktion "comment_email" nicht existiert

      Gruss

      Kommentar


      • #4
        Da hast du natürlich recht, ich hätte es anders ausdrücken können.
        Allerdings sind Codeschnipsel etwas ziemlich wichtiges, nur wird leider immer wieder vergessen sie "fertig" anzugeben oder mit einem Bug wie in meinem Fall

        PHP Anfänger haben es nämlich recht schwer die Manuals auf ihre Anforderungen umzusetzen.

        Kommentar


        • #5
          Das ganze in eine Funktion zu schrieben macht doch schon sinn wenn man eine communitypage hat oder? Kommt doch sicher öfters vor das man die email adresse überprüfen muss. Beispiele wären da: Registrierungsformular, Gästebuch einträge, Profileinträge, Kontaktformulare und andere einsendungen wo ein user seine email adresse eben so eintragen kann. Denke das das ganze in einer funktion steht ist nciht schlecht. Wenn man jetzt z.B.: ein standalon kontaktformular schreibt ist das natürlich was anderes.
          .visit » Tolga-Tanik.de
          .visit » TolgaTanikFoto @ Facebook
          .visit » Tolga Tanik Fotografie @ YouTube

          Kommentar


          • #6
            Seit PHP 5.2:
            PHP: Filter - Manual

            PHP-Code:
            <?php
            $strEmail 
            "  not an %email^^";
            $blnEmail filter_var($strEmailFILTER_VALIDATE_EMAIL) !== false;
            if (!
            $blnEmail) {
              
            $strEmail filter_var($strEmailFILTER_SANITIZE_EMAIL); // clean up string
            }
            ?>
            "Mein Name ist Lohse, ich kaufe hier ein."

            Kommentar


            • #7
              @David: du hast den RegEx doch nicht etwa aus der Wikipedia kopiert, oder?
              Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

              Kommentar


              • #8
                Ich? Nein. Aber mache ich vielleicht noch

                Kommentar


                • #9
                  PHP-Code:
                  function check_email($email)
                  {        
                      if(
                  preg_match('/^[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)*\@[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)+$/i'$email) return true;
                      
                      return 
                  false;

                  Code:
                  Parse error: syntax error, unexpected T_RETURN in /data/apache/users/kilu.de/bandenwuermer/www/kontakt.php on line 4
                  Soll dass so sein??

                  Kommentar


                  • #10
                    Da fehlt eine Klammer.
                    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                    Kommentar


                    • #11
                      Yo, haste REcht!
                      Hab ich jettzt erst erkannt.
                      So istes richtig.
                      PHP-Code:
                      function check_email($email)
                      {        
                          if(
                      preg_match('/^[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)*\@[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)+$/i'), $email) return true;
                       
                          return 
                      false;

                      //edit 01:
                      öhm, oder auch nicht:
                      Code:
                      Parse error: syntax error, unexpected ',' in /data/apache/users/kilu.de/bandenwuermer/www/kontakt.php on line 4

                      Kommentar


                      • #12
                        hinter $email müssen 2 klammern stehen und keine davor

                        Kommentar


                        • #13
                          gut danke.

                          Kommentar


                          • #14
                            sorry das ich den thread nochmal rauskram.. aber hat jemand die möglichkeit die chris nannte mit den filtern mal auf die schnelligkeit&speicherauslastung hin überprüft. spezielle jetzt gegen funktionen wie preg oder ereg..?
                            danke!

                            PHP-Code:
                                elseif(filter_var($valFILTER_VALIDATE_EMAIL) == false)
                                    
                            $msg .= "Bitte geben Sie eine gültige Email an.\n"
                            gibt es übrigens eine möglichkeit mit dem url filter nur auf www.xy.xx zu prüfen? ohne auf http?
                            anmerckung: die funktion prüft auf p://xy.xy.xy also auf ftp und http... für eine formularüberprüfung also unbrauchbar.

                            da prüf ich doch lieber einfach ob am anfang www. vorkommt und gut..
                            PHP-Code:
                                    elseif(mb_strpos($val'www'0) === false)
                                    
                            $msg .= "Die Eingabe muss mit www beginnen.\n"

                            noch ein nachtrag: leider prüft der filter email nur auf das vorhandensein des "@" nicht aber nach "@" und "." . schade zu früh gefreut

                            Kommentar


                            • #15
                              Zitat von taurus Beitrag anzeigen
                              sorry das ich den thread nochmal rauskram.. aber hat jemand die möglichkeit die chris nannte mit den filtern mal auf die schnelligkeit&speicherauslastung hin überprüft. spezielle jetzt gegen funktionen wie preg oder ereg..?
                              Ich finde den Ansatz ganz gut, allerdings hab ich das Gefühl, dass die API noch nicht so ganz ausgereift ist. Zu der Performance kann ich nichts sagen (gefühlt sind beide gleich schnell, aber was heisst das schon), weil ich die Filter nicht produktiv einsetze.

                              Zitat von taurus Beitrag anzeigen
                              PHP-Code:
                                  elseif(filter_var($valFILTER_VALIDATE_EMAIL) == false)
                                      
                              $msg .= "Bitte geben Sie eine gültige Email an.\n"
                              gibt es übrigens eine möglichkeit mit dem url filter nur auf www.xy.xx zu prüfen? ohne auf http?
                              So direkt nicht. Es gibt zwar das Flag FILTER_FLAG_SCHEME_REQUIRED, aber es macht keinen Unterschied, ob man es nutzt oder nicht. Das Ganze ist auch unsauber dokumentiert. Wenn du in die Liste der Validation Filter schaust, dann ist sind dort für den URL-Filter auch nur die Flags FILTER_FLAG_PATH_REQUIRED und FILTER_FLAG_QUERY_REQUIRED aufgelistet. Im Beispiel wird dann jedoch das Flag genutzt.

                              Ein Würgaround wäre der folgende:
                              PHP-Code:
                              function filter_url($url) {
                                  if(!(
                              $filtered filter_var($urlFILTER_VALIDATE_URL))) {
                                      
                              $filtered filter_var("http://$url"FILTER_VALIDATE_URL);
                                  }
                                  
                                  return 
                              $filtered;

                              Das Problem dabei, oder generell bei dem URL-Filter ist aber, dass das Teil auch URLs matched, die du wahrscheinlich gar nicht haben willst. "http://www?.google.desearch" z.B. ist ein gültiger URL.

                              Zitat von taurus Beitrag anzeigen
                              da prüf ich doch lieber einfach ob am anfang www. vorkommt und gut..
                              PHP-Code:
                                      elseif(mb_strpos($val'www'0) === false)
                                      
                              $msg .= "Die Eingabe muss mit www beginnen.\n"
                              Damit prüfst du nicht, ob $val mit "www" beginnt, sondern ob irgendwo in $val die Zeichenkette "www" vorkommt. Das ist etwas anderes. Ausserdem beginnen viele Domains nicht mit www. Daher ist der Ansatz schon falsch.

                              Zitat von taurus Beitrag anzeigen
                              noch ein nachtrag: leider prüft der filter email nur auf das vorhandensein des "@" nicht aber nach "@" und "." . schade zu früh gefreut
                              Weil der E-Mail-Filter eben genau wie der URL-Filter alle gültigen Adressen annimmt. Ein Punkt muss in der Adresse nicht vorkommen. Etwas wie thomas@localhost ist ja auch gültig.

                              Ich würde auch gar nicht so viel Arbeit in das Filtern investieren. Wenn du sichergehenwillst, ob die E-Mailadresse in Ordnung ist, musst du sowieso eine E-Mail zustellen, ansonsten hast du halt äußerlich gültige, aber dennoch unbrauchbare E-Mailadressen.

                              Kommentar

                              Lädt...
                              X