
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.

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.
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().

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;
}

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";
}
?>

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

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
9862600cookie-checkWie validiere ich eine E-Mail in PHP?yes
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
undfilter_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