Validar campo email de un formulario con PHP

En cualquier aplicación Web que se requiera interactuar con el usuario, a menudo es necesario crear un formulario de registro o entrada al sistema en el cual se requiere la introducción de un email.

Por norma, hay que pensar que los usuarios puden introducir en dichos campos de formulario datos que no se corresponden en formato con lo que se debe introducir. Uno de esos campos vulnerables son los campos de emails.

Para validar estos campos lo que debemos hacer es crear una función que se encargue de verificar si el texto introducido en el campo de email es correcto o no.

<?php
function comprobar_email($email){
   $mail_correcto = 0;
   //compruebo unas cosas primeras
   if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){
      if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) {
         //miro si tiene caracter .
         if (substr_count($email,".")>= 1){
            //obtengo la terminacion del dominio
            $term_dom = substr(strrchr ($email, '.'),1);
            //compruebo que la terminación del dominio sea correcta
            if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ){
               //compruebo que lo de antes del dominio sea correcto
               $antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1);
               $caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1);
               if ($caracter_ult != "@" && $caracter_ult != "."){
                  $mail_correcto = 1;
               }
            }
         }
      }
   }
   if ($mail_correcto)
      return 1;
   else
      return 0;
}
?>

En la función que hemos creado nos encargamos de revisar si la cadena introducida tiene los carácteres especiales que contienen los emails: @,, ., y que contenga un mínimo de 6 carácteres.

Esta función podría ser más sotisficada y por ejmplo podría comprobar también el dominio: com, es, net.

Nos podríamos ahorrar todo el código anterior reemplazando por la función siguiente:

function comprobar_email($email) {
    return (filter_var($email, FILTER_VALIDATE_EMAIL)) ? 1 : 0;
}

Para recibir lo que se ha escrito en el campo email del formulario lo podemos hacer de la siguiente forma:

<?php
if (isset($_POST['enviar'])) {
   if (comprobar_email($_POST['email']))
      echo 'El email introducido es correcto!';
   else
      echo 'El email introducido NO es correcto!';
}
?>

En el código anterior, si se pulsa el botón de enviar, comprobamos mediante la función anterior si el texto introducido en el campo con name=»email» es un email o no.

Finalmente, solo falta mostrar mediante HTML el formulario de la siguiente forma:

<form action="index.php" method="post">
Email:<input type="text" name="email" value="<?php echo $_POST['email']; ?>">
<input type="submit" name="enviar" value="Enviar"/>
</form>

Ver ejemplo en funcionamiento

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(2 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

7 respuestas a “Validar campo email de un formulario con PHP”

  1. Rodolfo dice:

    en mi codigo si se escribe mal el dominio… por ejemplo hotmaili o gmaili muestra como enviado pero no llega… Es decir no da error y parece que lo envió pero no llega.

    Como se puede hacer para que eso no suceda….Gracias por cualquier ayuda

    • Jose Aguilar dice:

      Hola,

      Gracias por tu mensaje.

      Para cubrir ese escenario tendrás que buscar la manera de controlar que el dominio existe en internet. No estoy seguro si PHP tiene algo para esto o tendrás que ingeniártelas tu.

      Jose Aguilar,
      Saludos

      Jose Aguilar,
      Saludos

  2. Validar campo email de un formulario en PHP | Marc20id Blog de un Desarrollador dice:

    […] que os sirva, este magnífico aporte es del blog de José Aguilar VN:F [1.9.20_1166]espere…Rating: 0.0/10 (0 votes […]

  3. Marcelo Zarza dice:

    Saludos, no es necesario realizar toda esa codificacion, se puede utilizar funciones nativas de PHP:

    function comprobar_email($email)
    {
    return (filter_var($email, FILTER_VALIDATE_EMAIL)) ? 1 : 0;
    }

  4. Otha Kilgallon dice:

    You are my aspiration, I own few blogs and very sporadically run out from brand :). «Follow your inclinations with due regard to the policeman round the corner.» by W. Somerset Maugham.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.