Comprobar si una cadena es una dirección de correo electrónico en PHP

5 minutos de lectura

avatar de usuario
tareas para el hogar

Estoy tratando de hacer una consulta SQL, pero necesito verificar de alguna manera si el valor es una dirección de correo electrónico. Necesito una manera de comprobar si $user es una dirección de correo electrónico, porque tengo valores de usuario como este en mi tabla.

test
test2
[email protected]
[email protected]
test392
[email protected]

y así…

necesito hacerlo asi $useremail cheques $user para saber si es una dirección de correo electrónico. Entonces puedo ACTUALIZAR los valores, WHERE user=test OR [email protected]etc.

$user = strtolower($olduser);
$useremail = "";

mysql_query("UPDATE _$setprofile SET user=$sn, fc=$fc WHERE user="$user" OR user="$useremail");

  • ¿Por qué importa si un valor es una dirección de correo electrónico? Una cadena puede ser una dirección de correo electrónico perfectamente formateada y aun así no ser válida, como [email protected]. Entonces, la única forma de saber con certeza si una dirección es válida es intentar enviarle un correo. Y si no le vas a enviar correo, ¿por qué te importa?

    –Daniel Pryden

    12 de noviembre de 2009 a las 23:23

  • @Daniel Pryden He almacenado nombres de usuario en mi base de datos. Quiero actualizar los valores de correo electrónico a valores regulares, de modo que cuando ejecuto mi secuencia de comandos, extrae los datos de nombre de usuario de la API y luego puedo reemplazar el valor de correo electrónico anterior con el nuevo valor de nombre de usuario. Es más conveniente para el guión que estoy tratando de escribir.

    – tareas para el hogar

    13 de noviembre de 2009 a las 0:06

Sin expresiones regulares:

<?php
    if(filter_var("[email protected]", FILTER_VALIDATE_EMAIL)) {
        // valid address
    }
    else {
        // invalid address
    }
?>

  • ¡Consejo superior! NB esto es PHP v5.2.0 o superior solamente

    – rico sabio

    12 de noviembre de 2009 a las 22:49

  • @richsage: Correcto, el filter La extensión se ha habilitado de forma predeterminada desde PHP 5.2.0 (lanzado el 2006-11-02). Para versiones anteriores de PHP, puede descargar e instalar la extensión de filtro de PECL.

    –Bill Karwin

    12 de noviembre de 2009 a las 22:59

  • Esto permite [email protected], sin una extensión de dominio como .com. ¿Hay alguna manera de arreglar esto?

    –Mike Moore

    5 de junio de 2010 a las 16:48

  • @MikeMoore: hay direcciones legales (aunque raras) en dominios de nivel superior, por lo que en realidad sería incorrecto requerir un punto en el nombre de dominio.

    – TextGeek

    3 mayo 2016 a las 15:25


  • @MikeMoore de php.net/manual/en/filter.filters.validate.php “En general, esto valida las direcciones de correo electrónico con la sintaxis de RFC 822, con la excepción de que los comentarios y los espacios en blanco se pliegan y los nombres de dominio sin punto no son compatibles.”

    -Erics

    6 de abril de 2017 a las 5:57


avatar de usuario
TORTUGA

Este no es un gran método y no comprueba si el correo electrónico existe, pero comprueba si parece un correo electrónico con la @ y la extensión de dominio.

function checkEmail($email) {
   $find1 = strpos($email, '@');
   $find2 = strpos($email, '.');
   return ($find1 !== false && $find2 !== false && $find2 > $find1);
}

$email="[email protected]";
if ( checkEmail($email) ) {
   echo $email . ' looks like a valid email address.';
}

if(filter_var($email, FILTER_VALIDATE_EMAIL))
{
    echo 'This is a valid email address.';
    echo filter_var($email, FILTER_VALIDATE_EMAIL);
    //exit("E-mail is not valid");
}
else
{
    echo 'Invalid email address.';
} 

  • ¡Esta es una respuesta muy subestimada por alguna razón!

    – ak93

    28 de febrero de 2019 a las 9:56

  • intente validar [email protected]

    – Señor Nentu’

    11 de febrero de 2020 a las 13:32

avatar de usuario
Travis

El enfoque más simple es usar una expresión regular para verificar las direcciones de correo electrónico, aunque existe cierto desacuerdo sobre qué tan preciso puede ser. Este proceso se discute en detalle aquí:

Usar una expresión regular para validar una dirección de correo electrónico

Puede usar REGEXP en MySQL para seleccionar de la base de datos según su expresión regular:

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

avatar de usuario
dominic sayers

Esta función es_email() le dará una respuesta definitiva sobre si la cadena es una dirección de correo electrónico válida o no. Hasta donde yo sé, ninguna otra solución hará esto con el mismo nivel de autoridad.

Si entiendo el ejemplo correctamente, lo usarías así

$user = strtolower($olduser);
$useremail = (is_email($user)) ? $user : '';

La función incorporada de PHP está incompleta. Soy el autor principal de is_email() así que estoy tocando mi propia trompeta aquí, pero he puesto mucho trabajo en esto para que nadie más tenga que hacerlo nunca más.

avatar de usuario
Comunidad

Puede usar expresiones regulares para validar su cadena de entrada para ver si coincide con una dirección de correo electrónico:

<?php 
$email = "[email protected]"; 
if(eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) { 
  echo "Valid email address."; 
} 
else { 
  echo "Invalid email address."; 
} 
?>

De:
http://www.totallyphp.co.uk/code/validate_an_email_address_using_regular_expressions.htm

EDITAR: para expresiones más precisas, consulte la respuesta de Travis sobre esta pregunta

avatar de usuario
Robar

He estado usando esta función durante muchos años en cientos de sitios. Probablemente no sea perfecto, pero nunca he tenido una queja de falsos negativos (o positivos):

function validate_email($email) {
    return (preg_match("/(@.*@)|(\.\.)|(@\.)|(\[email protected])|(^\.)/", $email) || !preg_match("/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/", $email)) ? false : true;
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad