miércoles, 18 de septiembre de 2013

Validación EMAIL CONFIABLE

Bueno, como hemos visto en algunos otros lados, las validaciones de correo electrónico son todo un rollo y siempre tienen un fallo, aceptan correos como blabla@blabla@blabla.blabla.bla.bla.bla, blabla@blabla.bla, etc.

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:


<form name="test">
     <input name="mailf" type="text">
     <input type="button" value="test" onclick="checkEmail(mailf.value)">

</form>

No hay comentarios:

Publicar un comentario