kostenloser Webspace werbefrei: lima-city


filter_var() - filter_validate_email

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    h**s

    Hallo,

    ich wollte mal wieder eine login-seite bauen da kam ich zum problem der überprüfung ob die anzumeldende emailadresse syntaktisch korrekt ist...

    bisher bin ich das mit regex angegangen, aber obwohl es das beispiele zuhauf gibt fand ich leider kein wirklich korrektes muster das alle möglichen emailadressen erlaubt, meist bezüglich der mittlerweile 92 erlaubten sonderzeichen im domain-part.

    nun habe ich die php-funktion filter_var() ausprobiert die mit den richtigen flags angeblich nach RFC konform ist... aber ich kriegs nicht hin - schon umlaute im domain-part werden geblockt.

    darum meine frage:
    wie beutze ich die funktion richtig ?
    muss man erst nach punycode konvertieren ?

    mein code dazu sieht so aus:
    <?php
    	if(filter_var($_POST['email'],FILTER_VALIDATE_EMAIL,FILTER_SANITIZE_EMAIL)!=$_POST['email']) {
    		echo('ungültig');
    	}
    ?>
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. g****e

    Das
    FILTER_SANITIZE_EMAIL
    steht für ganz andere Filter als eine EMail Adresse. Damit testest du EMail Header auf ihre Gültigkeit. (http://www.php.net/manual/de/function.filter-var.php#109542)

    if( filter_var($_POST['email'], FILTER_VALIDATE_EMAIL ) != $_POST['email'] ) {
    		echo('ungültig');
    	}

    reicht vollkommen. Dazu sei gesagt, dieser Weg des Validierens hat eine Schwäche: bei@spiel ist eine gültige EMail Adresse nach dieser Funktion (wenn das noch nicht behoben wurde)

    Ich hoffe das hilft, liebe Grüße
  4. Autor dieses Themas

    h**s

    ggamee schrieb:
    Das
    FILTER_SANITIZE_EMAIL
    steht für ganz andere Filter als eine EMail Adresse. Damit testest du EMail Header auf ihre Gültigkeit.
    hmm das hab ich anders verstanden:
    http://www.w3schools.com/php/filter_sanitize_email.asp



    ggamee schrieb:
    bei@spiel ist eine gültige EMail Adresse nach dieser Funktion (wenn das noch nicht behoben wurde)
    wurde wohl behoben denn bei@spiel geht nicht durch wenn ichs teste.



    hat jemand denn vielleicht nen hieb- und stichfesten regex für alle möglichen emailadressen nach RFC-Norm?
  5. m****r

    hcms schrieb:
    ggamee schrieb:
    Das
    FILTER_SANITIZE_EMAIL
    steht für ganz andere Filter als eine EMail Adresse. Damit testest du EMail Header auf ihre Gültigkeit.
    hmm das hab ich anders verstanden:
    http://www.w3schools.com/php/filter_sanitize_email.asp



    ggamee schrieb:
    bei@spiel ist eine gültige EMail Adresse nach dieser Funktion (wenn das noch nicht behoben wurde)
    wurde wohl behoben denn bei@spiel geht nicht durch wenn ichs teste.



    hat jemand denn vielleicht nen hieb- und stichfesten regex für alle möglichen emailadressen nach RFC-Norm?


    Ich rate dir: lass es bei dem was du hast. Das große Problem ist, dass das offizielle Regex welches alle möglichen eMailkonventionen einhält EXTREM lang ist. Und mit Extrem meine ich Extrem - als ich das vor einigen Monaten mal gelesen hatte, ist mir glatt die Spucke weggeblieben. Das was du da hast, müsste vollkommen reichen.

    EDIT: Das hier ist das offizielle Regex für eMails:

    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])


    Quelle: http://www.regular-expressions.info/email.html

    Beitrag zuletzt geändert: 21.2.2013 13:00:47 von midwar
  6. Es gibt kein "offiziellen Regex" für E-Mail Adressen. Ebenso wenig für URLs.

    Schau dir mal dies an: http://fightingforalostcause.net/misc/2006/compare-email-regex.php

    Ich persönlich nutze diesen:

    [!#\$%&\'\*\+\-\/0-9=\?a-z\^_`\{\}\|~]*(?:\\[\x00-\x7F][!#\$%&\'\*\+\-\/0-9=\?a-z\^_`\{\}\|~]*)*(?:\.[!#\$%&\'\*\+\-\/0-9=\?a-z\^_`\{\}\|~]*(?:\\[\x00-\x7F][!#\$%&\'\*\+\-\/0-9=\?a-z\^_`\{\}\|~]*)*)*@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)*\.[a-z]{2,}


    FILTER_VALIDATE_EMAIL ist schon okay. Wobei wir das Thema hier auch schon öfter hatten, z.B. hier.

    Beitrag zuletzt geändert: 21.2.2013 22:49:29 von fabo
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!