Foros del Web » Programando para Internet » PHP »

Pequeñísimo aporte: función para validar emails

Estas en el tema de Pequeñísimo aporte: función para validar emails en el foro de PHP en Foros del Web. Espero que a alguien le sirva: Código PHP: <?php function  validareMail ( $xEmail ){      /**      * Validez de la dirección      */      $xValid  =  true ;      /** ...
  #1 (permalink)  
Antiguo 08/10/2010, 07:50
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Pequeñísimo aporte: función para validar emails

Espero que a alguien le sirva:

Código PHP:
<?php

function validareMail($xEmail){
    
/**
     * Validez de la dirección
     */
    
$xValid true;
    
/**
     * Posición de la arroba en la dirección para obtener dirección y dominio
     */
    
$atPos strrpos($xEmail'@');

    
//Si $atPos es booleana Y es falso entonces no es email
    
if(is_bool($atPos) && !$atPos){
        
$xValid false;
    }else{
        
/**
         * El dominio, la parte posterior desde la posición de arroba
         */
        
$xDomain substr($xEmail$atPos+1);
        
/**
         * Idem anterior para la dirección
         */
        
$xAddr substr($xEmail0$atPos);
        
/**
         * La longitud de la direccion
         */
        
$xAddrLen strlen($xAddr);
        
/**
         * La longitud del dominio
         */
        
$xDomainLen strlen($xDomain);

        
//La dirección ha de ser >1 y <64
        
if ($xAddrLen || $xAddrLen 64){
            
$xValid false;

            
//el dominio >1 y <64
        
}else if ($xDomainLen || $xDomainLen 255){
            
$xValid false;

            
//Validación mediante expresiones regulares, no puede contener punto al comienzo
        
}else if ($xAddr[0] == '.' || $xAddr[$xAddrLen-1] == '.'){
            
$xValid false;

            
//No puede contener barras // o \\
        
}else if (preg_match('/\\.\\./'$xAddr)){
            
$xValid false;

        }else if (!
preg_match('/^[A-Za-z0-9\\-\\.]+$/'$xDomain)){
            
$xValid false;

        }else if (
preg_match('/\\.\\./'$xDomain)){
            
$xValid false;

        }else if(!
preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/'str_replace("\\\\","",$xAddr))) {
            if (!
preg_match('/^"(\\\\"|[^"])+"$/'str_replace("\\\\","",$xAddr))){
                
$xValid false;
            }
        }
        
//Debe existir el dominio
        
if ($xValid && !(checkdnsrr($xDomain,'MX') || checkdnsrr($xDomain,'A'))){
            
$xValid false;
        }
    }
    return 
$xValid;
}

/**
 * Implementación
 */

$email "[email protected]";
if(!
validareMail($email)){
    echo 
"Email $email es incorrecto";
}
else{
    echo 
"$email es correcto";
}

$email "[email protected]";
if(!
validareMail($email)){
    echo 
"<br>Email $email es incorrecto";
}
else{
    echo 
"<br>$email es correcto";
}

    
?>
  #2 (permalink)  
Antiguo 08/10/2010, 13:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Pequeñísimo aporte: función para validar emails

Gracias por el aporte, aunque hay formas mas rapidas de hacer esa validacion y una esta disponible directamente en PHP:

Código PHP:
Ver original
  1. $email = '[email protected]';
  2. if(filter_var($email, FILTER_VALIDATE_EMAIL))
  3.     echo "$email es correcto";
  4. else
  5.     echo "$email es incorrecto!!!";
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 08/10/2010, 13:59
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: Pequeñísimo aporte: función para validar emails

Wow @triby esa no la conocía
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #4 (permalink)  
Antiguo 08/10/2010, 14:34
Avatar de dreamconception  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico-Dinamarca
Mensajes: 22
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: Pequeñísimo aporte: función para validar emails

Buen script, y Triby es bien! Pero es posibilidad parse email como spambot@localhost con filter_var. Pienso el script de repara2 es mas bien para detección completa (yo quiero mucho el DNS lookup).
  #5 (permalink)  
Antiguo 08/10/2010, 14:53
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: Pequeñísimo aporte: función para validar emails

Cita:
Iniciado por maycolalvarez Ver Mensaje
Wow @triby esa no la conocía
Ni yo! que comodidad :)
  #6 (permalink)  
Antiguo 08/10/2010, 15:11
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 15 años, 1 mes
Puntos: 334
Respuesta: Pequeñísimo aporte: función para validar emails

por lo personal.. no uso filter_var ya que al hacer pruebas con este te das cuenta de lo poco confiable que es..

Código PHP:
<?php
echo filter_var('hidek1@gmail'FILTER_VALIDATE_EMAIL) ? 'true' 'false'// true
echo '<br />';
echo 
filter_var('[email protected]'FILTER_VALIDATE_EMAIL) ? 'true' 'false'// true
__________________
More about me...
~ @rhyudek1
~ Github
  #7 (permalink)  
Antiguo 08/10/2010, 15:15
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 9 meses
Puntos: 96
Respuesta: Pequeñísimo aporte: función para validar emails

Cita:
Iniciado por Vun Ver Mensaje
Ni yo! que comodidad :)

Yo tampoco bastante util aproveche y pegue una busca en google y aparte de ella se encuentran mas como por ejemplo para validar una ip, url, int, boleean... Aqui les dejo la fuente Click
Aqui
__________________
:.:Nano.:: @nano_hard - Retornando al foro
  #8 (permalink)  
Antiguo 08/10/2010, 15:21
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Pequeñísimo aporte: función para validar emails

Ciertamente puede haber algun problema con filter_var(), en las pruebas que he realizado no me ha dado fallos, pero, tambien hay una simple expresion regular que tome de PunBB o algun otro foro y es tambien muy facil de usar:

Código PHP:
Ver original
  1. function is_valid_email($email) {
  2.     return preg_match('/^(([^<>()[\]\\.,;:\s@"\']+(\.[^<>()[\]\\.,;:\s@"\']+)*)|("[^"\']+"))@((\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])|(([a-zA-Z\d\-]+\.)+[a-zA-Z]{2,}))$/', $email);
  3. }

En cuanto a filter_var() todavia lo tengo en fase de prueba y no puedo asegurar que todas las opciones sean realmente funcionales, pero algun dia lo averiguare!
__________________
- León, Guanajuato
- GV-Foto
  #9 (permalink)  
Antiguo 08/10/2010, 15:22
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Pequeñísimo aporte: función para validar emails

Cita:
Iniciado por Hidek1 Ver Mensaje
por lo personal.. no uso filter_var ya que al hacer pruebas con este te das cuenta de lo poco confiable que es..
+1

de algún modo por eso me fascinan las expresiones regulares, al menos dicho así son mas fiables que usar filter...

aquí mi sencillo aporte:
Código PHP:
/**
 * Validar E-mail
 *
 * @param  string  $text  Cadena
 * @param  boolean $multi Emails multiples?
 * @param  boolean $check Emplear checkdnsrr()?
 * @return boolean
 */
function is_email($text$multi FALSE$check FALSE)
{
    static 
$expr '/^([\w\+\-:]+)(\.[\w\+\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/i';
    
$text preg_split('/[,;\|]+/', (string) $text);

    if ( ! 
$multi && (sizeof($text) > 1)) return FALSE;
    elseif (empty(
$text)) return FALSE;

    foreach (
$text as $value)
    {
        if ( ! 
preg_match($expr$value)) return FALSE;
        elseif (
$check === TRUE && ! checkdnsrr(substr($valuestrpos($value'@') +1), 'MX')) return FALSE;
    }
    return 
TRUE;

__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 08/10/2010, 15:34
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 9 meses
Puntos: 96
Información Respuesta: Pequeñísimo aporte: función para validar emails

Saludos

Si estoy de acuerdo con pateketrueke mejor seguir con expresiones regulares, estuve leyendo en securityfocus un poco mas de FILTER_VALIDATE_EMAIL y tiene la siguiente vulnerabilidad:

Cita:

Falla al limpiar adecuadamente la entrada proporcionada por el usuario.
La explotación de este problema puede permitir a un usuario malicioso poder crear cabeceras arbitrarias de correo electrónico y transmitir mensajes de spam desde el ordenador afectado

Not Vulnerable: PHP PHP 5.2.3
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Etiquetas: correo, electronico, email, validar, aportes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:33.