Ahí te mando un ejemplito comentado en castellano, saludos:
Código PHP:
Ver original<?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
*/
//Si $atPos es booleana Y es falso entonces no es email
$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($xEmail, 0, $atPos); /**
* La longitud de la direccion
*/
/**
* La longitud del dominio
*/
$xDomainLen = strlen($xDomain); //La dirección ha de ser >1 y <64
if ($xAddrLen < 1 || $xAddrLen > 64) {
$xValid = false;
//el dominio >1 y <64
} else if ($xDomainLen < 1 || $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 \\
$xValid = false;
} else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $xDomain)) { $xValid = false;
$xValid = false;
} else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\", "", $xAddr))) { $xValid = false;
}
}
//Debe existir el dominio
$xValid = false;
}
}
return $xValid;
}
/**
* Implementación
*/
if (!validareMail($email)) {
echo "Email $email es incorrecto";
} else {
echo "$email es correcto";
}
if (!validareMail($email)) {
echo "<br>Email $email es incorrecto";
} else {
echo "<br>$email es correcto";
}
?>