E-Mail-Überprüfung

  • Hallo Ihr Lieben,


    ich bin gerade dabei mich mit den regulären Ausdrücken von PHP zu beschäftigen und habe mir mal das Beispiel der E-Mail-Überprüfung rausgesucht, jedoch sind mir einige Fragen aufgekommen, die ihr mir vielleicht beantworten könnt oder ich stell mich einfach zu doof an :P


    Der Ausdruck lautet wie folgt

    Code
    '/^[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)*\@[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)+$/i'


    Code
    [^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+


    Die Zeichen dürfen nicht vorhanden sein und müssen mindestens 1 mal vorkommen.


    Code
    (?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)*


    Dort sind wieder die Zeichen in der eckigen Klammer verboten, jedoch stehe ich noch auf dem Schlauch, was ?:\. bedeutet.


    Code
    \@


    Jetzt kommt das @ Zeichen


    Code
    [^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+(?:\.[^\x00-\x20()<>@,;:\\".[\]\x7f-\xff]+)+$/i


    Wieder das gleiche wie oben mit den verbotenen Zeichen. Außerdem wird festgelegt, dass die Überprüfung bis zum Ende der Eingabe erfolgt. Was das /i bedeutet weiß ich leider auch nicht.


    Vielleicht könntet ihr mir ja da nochmal unter die Arme greifen :P


    lg

  • Eine bessere Variante wäre auf die C-API von PHP zu setzen.


    Hierfür gibt es die beiden Funktion:
    filter_input()
    filter_var()
    Die Funktionen unterscheiden sich lediglich darin, dass filter_input auf Existenz prüft und keine Notice hervorruft


    Was kann man damit machen?
    Man kann validieren und bereinigen (validate & sanitize). Hierzu kann man filters und flags angeben.
    PHP: Einführung - Manual


    Möchten man nun eine E-Mail Adresse auf Korrektheit testen, so schreibt man folgendes:

    PHP
    filter_var($email, FILTER_VALIDATE_EMAIL);



    Oder direkt säubern und validieren:

    PHP
    filter_var($email, FILTER_SANITIZE_EMAIL);



    Die filter_input Variante sieht so aus:

    PHP
    filter_input(INPUT_POST | INPUT_GET, 'email', FILTER_VALIDATE_EMAIL);


    INPUT_POST oder INPUT_GET, je nachdem, wie der Request erfolgt, man kann aber auch beide Methoden aktzeptieren.
    der 2. Parameter ist der Index des arrays.