Por esto me dispuse a elaborar una validación para email que es un poco más larga y laboriosa, pero realmente más confiable, ya que se ajusta a las siguientes reglas:
<username>@<domain>.<ext>
username:
- Debe ser un nombre de usuario el cual comience de manera obligatoria con un caracter alfabético sea letra capital o no y sin acentos.
- A partir del segundo caracter se puede usar "_" o "." o números.
@
- Este caracter debe estar presente de manera obligatoria y solo debe tener dos segmentos de caracteres, uno a la derecha y otro a la izquierda.
domain:
- Debe ser un nombre de dominio el cual comience de manera obligatoria con un caracter alfabético sea letra capital o no y sin acentos.
- A partir del segundo caracter se puede usar "_" o "." o números.
ext:
- Debe ser una extensión válida de dominio conocida, como .com, .net, .mx
- Como máximo puede haber solo dos extensiones.
Explicado esto, les pego el código javascript:
<script type="text/javascript">
function validFirstPart(username){
var firstCharacter = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var validcharacters = '1234567890-_.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var band,sended=true;
for (var i = 0, l = username.length; i < l; ++i) {
(i==0) ? (
band = (firstCharacter.indexOf(username.substr(i, 1)) == -1) ? false : true
) : (
band = (validcharacters.indexOf(username.substr(i, 1)) == -1)? false : true
)
if(!band) sended = false;
}
return (sended) ? sended : false;}
function validSecondPart(secondparam){
var domain = secondparam.split(".");
if(domain.length==2){
var valid1 = validFirstPart(domain[0]);
var valid2 = generalDomain(domain[1]);
return (valid1&&valid2) ? true : false;
}
}
if(domain.length==3){
var valid1 = validFirstPart(domain[0]);
var valid2 = generalDomain(domain[1]);
var valid3 = countryDomain(domain[2]);
return (valid1&&valid2&&valid3) ? true : false;
}
}
if((domain.length!=2)&&(domain.length!=3)){
return false;
}
}
function generalDomain(firstDomainExt){
var array = new Array('com','net','org','biz','coop','info','museum','name',
'pro','edu','gov','gob','int','mil','ac','ad','ae','af','ag',
'ai','al','am','an','ao','aq','ar','as','at','au','aw',
'az','ba','bb','bd','be','bf','bg','bh','bi','bj','bm',
'bn','bo','br','bs','bt','bv','bw','by','bz','ca','cc',
'cd','cf','cg','ch','ci','ck','cl','cm','cn','co','cr',
'cu','cv','cx','cy','cz','de','dj','dk','dm','do','dz',
'ec','ee','eg','eh','er','es','et','fi','fj','fk','fm',
'fo','fr','ga','gd','ge','gf','gg','gh','gi','gl','gm',
'gn','gp','gq','gr','gs','gt','gu','gv','gy','hk','hm',
'hn','hr','ht','hu','id','ie','il','im','in','io','iq',
'ir','is','it','je','jm','jo','jp','ke','kg','kh','ki',
'km','kn','kp','kr','kw','ky','kz','la','lb','lc','li',
'lk','lr','ls','lt','lu','lv','ly','ma','mc','md','mg',
'mh','mk','ml','mm','mn','mo','mp','mq','mr','ms','mt',
'mu','mv','mw','mx','my','mz','na','nc','ne','nf','ng',
'ni','nl','no','np','nr','nu','nz','om','pa','pe','pf',
'pg','ph','pk','pl','pm','pn','pr','ps','pt','pw','py',
'qa','re','ro','rw','ru','sa','sb','sc','sd','se','sg',
'sh','si','sj','sk','sl','sm','sn','so','sr','st','sv',
'sy','sz','tc','td','tf','tg','th','tj','tk','tm','tn',
'to','tp','tr','tt','tv','tw','tz','ua','ug','uk','um',
'us','uy','uz','va','vc','ve','vg','vi','vn','vu','ws',
'wf','ye','yt','yu','za','zm','zw')
;
return isInArray(firstDomainExt,array);
}
function countryDomain(secondDomainExt){
var array = new Array('ac','ad','ae','af','ag',
'ai','al','am','an','ao','aq','ar','as','at','au','aw',
'az','ba','bb','bd','be','bf','bg','bh','bi','bj','bm',
'bn','bo','br','bs','bt','bv','bw','by','bz','ca','cc',
'cd','cf','cg','ch','ci','ck','cl','cm','cn','co','cr',
'cu','cv','cx','cy','cz','de','dj','dk','dm','do','dz',
'ec','ee','eg','eh','er','es','et','fi','fj','fk','fm',
'fo','fr','ga','gd','ge','gf','gg','gh','gi','gl','gm',
'gn','gp','gq','gr','gs','gt','gu','gv','gy','hk','hm',
'hn','hr','ht','hu','id','ie','il','im','in','io','iq',
'ir','is','it','je','jm','jo','jp','ke','kg','kh','ki',
'km','kn','kp','kr','kw','ky','kz','la','lb','lc','li',
'lk','lr','ls','lt','lu','lv','ly','ma','mc','md','mg',
'mh','mk','ml','mm','mn','mo','mp','mq','mr','ms','mt',
'mu','mv','mw','mx','my','mz','na','nc','ne','nf','ng',
'ni','nl','no','np','nr','nu','nz','om','pa','pe','pf',
'pg','ph','pk','pl','pm','pn','pr','ps','pt','pw','py',
'qa','re','ro','rw','ru','sa','sb','sc','sd','se','sg',
'sh','si','sj','sk','sl','sm','sn','so','sr','st','sv',
'sy','sz','tc','td','tf','tg','th','tj','tk','tm','tn',
'to','tp','tr','tt','tv','tw','tz','ua','ug','uk','um',
'us','uy','uz','va','vc','ve','vg','vi','vn','vu','ws',
'wf','ye','yt','yu','za','zm','zw')
;
return isInArray(secondDomainExt,array);
}
function isInArray (value, arrValues) {
return (arrValues.indexOf(value) > -1) ? true : false;
}
function checkEmail(emailAddress) {
var mail = emailAddress.toString();
var parts = Array();
var valid1, valid2;
if(mail.contains("@")){
parts = mail.split("@");
(parts.length<=2) ? (
((valid1 = validFirstPart(parts[0]))&&(valid2 = validSecondPart(parts[1]))) ? alert("valido") : alert("no valido")
) : (
alert("no se puede tener más de un @")
);} else {
alert("no hay @");
}
}
</script>
Sólo lo adaptamos al evento de algún input:
Sólo lo adaptamos al evento de algún input:
<form name="test">
<input name="mailf" type="text">
<input type="button" value="test" onclick="checkEmail(mailf.value)">
</form>
No hay comentarios:
Publicar un comentario