Wie validiere ich eine E-Mail in PHP?

Lesezeit: 7 Minuten

Wie validiere ich eine E Mail in PHP
Lerner

Wie kann ich mit php5 überprüfen, ob der Eingabewert eine gültige E-Mail-Adresse ist? Jetzt verwende ich diesen Code

function isValidEmail($email){ 
     $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"; 

     if (eregi($pattern, $email)){ 
        return true; 
     } 
     else { 
        return false; 
     }    
} 

aber es zeigt einen veralteten Fehler. Wie kann ich dieses Problem beheben? Bitte hilf mir.

  • Die richtige Antwort wurde bereits gegeben, aber bzgl veraltet Problem: Die Verwendung von regulären POSIX-Ausdrücken (was eregi ist eine Funktion von) ist veraltet. Verwenden PCRE stattdessen.

    – Felix Klinge

    2. Mai 2011 um 10:09 Uhr


  • Übrigens ist Ihre Regex völlig falsch. Einige absolut gültige Adressen werden von Ihrer Funktion als ungültig markiert. Das Filtern von E-Mail-Adressen mit einer Regex ist ein Albtraum.

    – Artefakt2

    2. Mai 2011 um 10:19 Uhr

  • Du solltest benutzen RFC 822 Standard und hier ist ein guter Artikel Parsing von E-Mail-Adressen in PHP das erklärt es.

    – kt

    6. Januar 2014 um 17:34 Uhr

  • Bleiben Sie weg von regex und filter_var() Lösungen für die Validierung von E-Mails. Siehe diese Antwort: stackoverflow.com/a/42037557/953833

    – Jabari

    4. Februar 2017 um 7:16 Uhr

Wie validiere ich eine E Mail in PHP
Kap

Du kannst den … benutzen filter_var() Funktion, die Ihnen viele praktische Validierungs- und Bereinigungsoptionen bietet.

filter_var($email, FILTER_VALIDATE_EMAIL)

Wenn Sie Ihren Code, der sich auf Ihre Funktion stützte, nicht ändern möchten, tun Sie einfach Folgendes:

function isValidEmail($email){ 
    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}

Notiz: Für andere Verwendungszwecke (wo Sie Regex benötigen), die veraltete ereg Funktionsfamilie (POSIX Regex Functions) sollte durch die ersetzt werden preg Familie (PCRE Regex-Funktionen). Es gibt eine kleine Menge Unterschiede, das Lesen des Handbuchs sollte ausreichen.

Aktualisierung 1: Wie von @binaryLV hervorgehoben:

PHP 5.3.3 und 5.2.14 hatten a Insekt im Zusammenhang mit FILTER_VALIDATE_EMAIL, was beim Validieren großer Werte zu einem Segfault führte. Eine einfache und sichere Problemumgehung hierfür ist die Verwendung von strlen()
Vor filter_var(). Bei 5.3.4 Final bin ich mir nicht sicher, aber es steht geschrieben, dass auch einige 5.3.4-Snapshot-Versionen betroffen waren.

Dieser Fehler wurde bereits behoben.

Aktualisierung 2: Diese Methode wird natürlich validiert bazmega@kapa als gültige E-Mail-Adresse, da es sich tatsächlich um eine gültige E-Mail-Adresse handelt. Aber meistens möchte man im Internet auch, dass die E-Mail-Adresse eine TLD hat: bazmega@kapa.com. Wie darin vorgeschlagen Blogeintrag (Link gepostet von @Istiaque Ahmed), können Sie erweitern filter_var() mit einer Regex, die auf das Vorhandensein eines Punktes im Domänenteil prüft (prüft nicht auf a gültig TLD aber):

function isValidEmail($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL) 
        && preg_match('/@.+\./', $email);
}

Wie @Eliseo Ocampos betonte, besteht dieses Problem nur vor PHP 5.3, in dieser Version haben sie die Regex geändert und jetzt führt es diese Überprüfung durch, sodass Sie dies nicht tun müssen.

  • +1 Allerdings möchten Sie vielleicht erwähnen, dass dies nur in PHP 5.2.x und höher verfügbar ist. 🙂

    – JohnParker

    2. Mai 2011 um 10:09 Uhr

  • @middaparka: Da das OP eine veraltete Nachricht für erhält eregi, es scheint, dass er PHP 5.3 verwendet. Aber ja, es ist wichtig, es zu erwähnen (für andere)).

    – Felix Klinge

    2. Mai 2011 um 10:10 Uhr

  • PHP 5.3.3 und 5.2.14 hatten einen Fehler (bugs.php.net/52929) im Zusammenhang mit FILTER_VALIDATE_EMAIL, was beim Validieren großer Werte zu Segfault führte. Eine einfache und sichere Problemumgehung hierfür ist die Verwendung von strlen() Vor filter_val(). Bei 5.3.4 Final bin ich mir nicht sicher, aber es steht geschrieben, dass auch einige 5.3.4-Snapshot-Versionen betroffen waren.

    – binärLV

    2. Mai 2011 um 10:39 Uhr

  • @binaryLV, filter_val oder filter_var ?

    – Istiaque Ahmed

    21. November 2012 um 9:31 Uhr

  • @kapa, eigentlich brauchen Sie nicht mehr nach einem Punkt im Domänenteil zu suchen. Sehen svn.php.net/viewvc/php/php-src/branches/PHP_5_3/ext/filter/…

    – Eliseo Ocampos

    9. Dezember 2013 um 21:21 Uhr

Siehe die Anmerkungen unter http://www.php.net/manual/en/function.ereg.php:

Note:

Ab PHP 5.3.0 ist die Regex-Erweiterung zugunsten von veraltet PCRE-Erweiterung. Beim Aufrufen dieser Funktion wird eine E_DEPRECATED-Meldung ausgegeben. Sehen die Liste der Unterschiede
für Hilfe bei der Konvertierung in PCRE.

Note:

preg_match()das eine Perl-kompatible Syntax für reguläre Ausdrücke verwendet, ist oft eine schnellere Alternative zu ereg().

1646888047 906 Wie validiere ich eine E Mail in PHP
Ivijan Stefan Stipic

Dies ist ein alter Beitrag, aber ich werde eine meiner Lösungen teilen, da hier noch niemand ein Problem erwähnt hat.

Eine neue E-Mail-Adresse kann UTF-8-Zeichen oder spezielle Domänennamen wie z .live, .news usw.

Außerdem finde ich, dass einige E-Mail-Adressen auf Kyrillisch und auf alle Fälle Standard-Regex oder sein können filter_var() wird versagen.

Deshalb habe ich eine Lösung dafür gemacht:

function valid_email($email) 
{
    if(is_array($email) || is_numeric($email) || is_bool($email) || is_float($email) || is_file($email) || is_dir($email) || is_int($email))
        return false;
    else
    {
        $email=trim(strtolower($email));
        if(filter_var($email, FILTER_VALIDATE_EMAIL)!==false) return $email;
        else
        {
            $pattern = '/^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD';
            return (preg_match($pattern, $email) === 1) ? $email : false;
        }
    }
}

Diese Funktion funktioniert perfekt für alle Fälle und E-Mail-Formate.

Ich benutze immer das:

function validEmail($email){
    // First, we check that there's one @ symbol, and that the lengths are right
    if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/", $email)) {
        // Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
        return false;
    }
    // Split it into sections to make life easier
    $email_array = explode("@", $email);
    $local_array = explode(".", $email_array[0]);
    for ($i = 0; $i < sizeof($local_array); $i++) {
        if (!preg_match("/^(([A-Za-z0-9!#$%&'*+\/=?^_`{|}~-][A-Za-z0-9!#$%&'*+\/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$/", $local_array[$i])) {
            return false;
        }
    }
    if (!preg_match("/^\[?[0-9\.]+\]?$/", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
        $domain_array = explode(".", $email_array[1]);
        if (sizeof($domain_array) < 2) {
            return false; // Not enough parts to domain
        }
        for ($i = 0; $i < sizeof($domain_array); $i++) {
            if (!preg_match("/^(([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;
}

Wie validiere ich eine E Mail in PHP
Mufazmi

Benutzerdaten sind für einen guten Entwickler sehr wichtig, also fragen Sie nicht immer wieder nach denselben Daten, verwenden Sie etwas Logik, um einige grundlegende Fehler in Daten zu korrigieren.

Vor der Validierung der E-Mail: Zuerst müssen Sie alle illegalen Zeichen aus der E-Mail entfernen.

//This will Remove all illegal characters from email
$email = filter_var($email, FILTER_SANITIZE_EMAIL);

Danach validieren Sie Ihre E-Mail-Adresse damit filter_var() Funktion.

filter_var($email, FILTER_VALIDATE_EMAIL)) // To Validate the email

Für zB

<?php
$email = "john.doe@example.com";

// Remove all illegal characters from email
$email = filter_var($email, FILTER_SANITIZE_EMAIL);

// Validate email
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo $email." is a valid email address";
} else {
    echo $email." is not a valid email address";
}
?>

1646888048 519 Wie validiere ich eine E Mail in PHP
römisch

Verwenden:

var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL));
$validator = new EmailValidator();
$multipleValidations = new MultipleValidationWithAnd([
    new RFCValidation(),
    new DNSCheckValidation()
]);
$validator->isValid("example@example.com", $multipleValidations); //true

1646888048 911 Wie validiere ich eine E Mail in PHP
Paketüberfluss

Achten Sie darauf, eine Adresse als iasd@xz—–com ist UNGÜLTIG, aber filter_var() gibt wahr zurück, viele andere Zeichenfolgen (E-Mails) geben mit filter_var() UNGÜLTIG zurück.

Für die E-Mail-Validierung verwende ich diese Funktion:

function correcorre($s){// correo correcto
    $x = '^([[:alnum:]](_|-|\.)*)*[[:alnum:]]+@([[:alnum:]]+(-|\.)+)*[[:alnum:]]+\.[[:alnum:]]+$';
    preg_match("!$x!i", $s, $M);
    if(!empty($M[0]))return($M[0]);
    }

Bitte verbessern und teilen, danke

986260cookie-checkWie validiere ich eine E-Mail in PHP?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy