Aqui tienes un script para validar la dirección de correo
Código PHP:
<HTML>
<HEAD>
<TITLE>Validación de direcciones de correo</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>VALIDACIÓN DE DIRECCIONES DE CORREO</H1>
<FORM ACTION="valida_correo.php" METHOD="POST">
<?php
echo '<P><INPUT TYPE="TEXT" NAME="cadena" VALUE="',
$cadena, '" SIZE=50>';
?>
<P><INPUT TYPE="SUBMIT" VALUE="VALIDAR">
<INPUT TYPE="RESET" VALUE="LIMPIAR">
</FORM>
<?php
// Función que comprueba que no haya dos puntos seguidos
function comprobar_puntos($cadena)
{
$seguir = true;
// Se obtiene la posición del primer punto
$posicion = strpos($cadena, '.');
// Se comprueba que exista
while (($posicion) && ($seguir))
{
// Se comprueba que el anterior y el siguiente no son . o @
if (($cadena[$posicion - 1] != '.') &&
($cadena[$posicion + 1] != '.') &&
($cadena[$posicion - 1] != '@') &&
($cadena[$posicion + 1] != '@'))
// Se obtiene la subcadena a partir del punto
$cadena = substr($cadena, $posicion + 1);
else
$seguir = false;
// Se vuelve a obtener la posición del primer punto
$posicion = strpos($cadena, '.');
}
return $seguir;
}
function validar_correo ($cadena)
{
// Primero se comprueba que sólo aparezca una arroba
// y que al menos exista un punto decimal. Para lo que
// se calcula la frecuencia de los caracteres
$caracteres = count_chars($cadena);
if (($caracteres[ord('@')] == 1) && ($caracteres[ord('.')]>0))
{
// Se comprueba que sólo existan caracteres alfabéticos
$caracteres = count_chars($cadena, 3);
$i = 0;
$seguir = true;
while (($i < strlen($cadena)) && $seguir)
{
$posicion = ord($cadena[$i]);
if ($posicion < ord('0'))
{
// El código del carácter no es numérico
if ($posicion != ord('.')) // y no es el punto
$seguir = false;
}
elseif (($posicion > ord('9')) && ($posicion < ord('@')))
$seguir = false; // Entre números y letras mayúsculas
elseif (($posicion > ord('Z')) && ($posicion < ord('a')))
$seguir = false; // Entre mayúsculas y minúsculas
elseif ($posicion > ord('z'))
$seguir = false; // mayor que letras minúsculas
$i++;
}
if ($seguir) // Si de momento es correcto
{
// comprobar que detrás de @ hay caracteres
// y al menos un punto
$posicion1 = strpos($cadena, '@');
$posicion2 = strrpos($cadena, '.');
$seguir = (($posicion1 + 1 <= $posicion2) &&
($posicion2 < (strlen($cadena) - 1)) &&
($posicion1 <> 0));
if ($seguir)
$seguir = comprobar_puntos($cadena);
}
return $seguir;
}
else
{
// No tiene una arroba, ni un punto.
return false;
}
}
// Determina si hay o no cadena de caracteres
if (!empty($cadena))
if (validar_correo($cadena))
echo "'$cadena' es una dirección de correo válida<BR>";
else
echo "'$cadena' no es una dirección de correo válida<BR>";
?>
</CENTER>
</BODY>
</HTML>