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($xEmail, 0, $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 < 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 \\
}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";
}
?>