P: ¿Cómo valido una dirección de email utilizando expresiones regulares?
R:
Versión Simple
Código PHP:
<html>
<head>
<script language="javascript" type="text/javascript" defer>
function validaEmail(email)
{
var re = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
if (!re.test(email)) {
alert ("Dirección de email inválida");
return false;
}
return true;
}</script>
</head>
<body>
<center>
<form name="email" onSubmit="return validaEmail(this.email.value);">
Email: <input type="text" name="email"><br>
<input type=submit value="Submit">
</form>
</center>
</body>
</html>
Versión Compleja:
Código PHP:
<html>
<head>
<script language="javascript" type="text/javascript" defer>
// Regexp creado por Sandeep V. Tamhankar ([email protected])
function emailCheck (emailStr) {
var emailPat=/^(.+)@(.+)$/;
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
var validChars="\[^\\s" + specialChars + "\]";
var quotedUser="(\"[^\"]*\")";
var ipDomainPat=/^[(d{1,3}).(d{1,3}).(d{1,3}).(d{1,3})]$/;
var atom=validChars + '+';
var word="(" + atom + "|" + quotedUser + ")";
var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
var matchArray=emailStr.match(emailPat);
if (matchArray==null) {
alert("La dirección de correo parece ser inválida (verifique las @ y .)")
return false
}
var user=matchArray[1]
var domain=matchArray[2]
if (user.match(userPat)==null) {
alert("El nombre de usuario parece ser inválido.")
return false
}
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
for (var i=1;i<=4;i++) {
if (IPArray[i]>255) {
alert("La dirección IP de destino es inválida!")
return false
}
}
return true
}
var domainArray=domain.match(domainPat)
if (domainArray==null) {
alert("El dominio no parece ser válido.")
return false
}
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 ||
domArr[domArr.length-1].length>3) {
alert("Las direcciones deben terminar con dominios de tres letras, o el código de país de dos letras.")
return false
}
if (len<2) {
var errStr="Dominio Inválido!";
alert(errStr)
return false
}
return true;
}
</script>
</head>
<body>
<center>
<form name="email" onSubmit="return emailCheck(this.email.value);">
Email: <input type="text" name="email"><br>
<input type=submit value="Submit">
</form>
</center>
</body>
</html>
Funciona en:
- IE 4+
- Netscape 4+
- Opera 5+
- Mozilla 0.8+ / Netscape 6+