2010-05-18 20 views
163

No estoy muy seguro de cómo hacerlo. Necesito para validar direcciones de correo electrónico utilizando expresiones regulares con algo como esto:Validar direcciones de correo electrónico utilizando jQuery y regex

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum) 

entonces necesito para ejecutar esto en una función jQuery así:

$j("#fld_emailaddress").live('change',function() { 
var emailaddress = $j("#fld_emailaddress").val(); 

// validation here? 

if(emailaddress){} 

// end validation 

$j.ajax({ 
     type: "POST", 
     url: "../ff-admin/ff-register/ff-user-check.php", 
     data: "fld_emailaddress="+ emailaddress, 
     success: function(msg) 
     { 
      if(msg == 'OK') { 
      $j("#fld_username").attr('disabled',false); 
      $j("#fld_password").attr('disabled',false); 
      $j("#cmd_register_submit").attr('disabled',false); 
      $j("#fld_emailaddress").removeClass('object_error'); // if necessary 
      $j("#fld_emailaddress").addClass("object_ok"); 
      $j('#email_ac').html('&nbsp;<img src="img/cool.png" align="absmiddle"> <font color="Green"> Your email <strong>'+ emailaddress+'</strong> is OK.</font> '); 
      } else { 
      $j("#fld_username").attr('disabled',true); 
      $j("#fld_password").attr('disabled',true); 
      $j("#cmd_register_submit").attr('disabled',true); 
      $j("#fld_emailaddress").removeClass('object_ok'); // if necessary 
      $j("#fld_emailaddress").addClass("object_error"); 
      $j('#email_ac').html(msg); 
      } 
     } 
    }); 
}); 

De dónde viene la validación ir y qué es la expresión ?

+0

Véase también http://stackoverflow.com/a/15659649/292060 – goodeye

Respuesta

473

ACTUALIZACIONES


function isValidEmailAddress(emailAddress) { 
    var pattern = /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.)+([a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.?$/i; 
    return pattern.test(emailAddress); 
} 

if(!isValidEmailAddress(emailaddress)) { /* do stuff here */ } 
+2

gracias Aseptik aparte de "perdido" la dirección de direccióndecorreo funciona bien, sí, sé que no existe la expresión regular, el 100% existe, pero puede ser "bonita" cerca de – RussP

+2

¡bienvenido, hermano! ;-) –

+1

no validó eso demasiado profundo, pero ya me dio un falso positivo para [email protected] – gcb

28

Esta es mi solución:

function isValidEmailAddress(emailAddress) { 
    var pattern = new RegExp(/^[+a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i); 
    // alert(pattern.test(emailAddress)); 
    return pattern.test(emailAddress); 
}; 

encontrado que RegExp aquí: http://mdskinner.com/code/email-regex-and-validation-jquery

+3

su punto sobre el signo más es válido, pero su expresión regular es menos mejor que la que estoy usando en mi ejemplo. ps: he actualizado mi expresión regular para soportar el signo más. –

+1

Genial, gracias :) –

+0

La mayoría de las veces solo quiere validar que el usuario ingresó el correo electrónico en el formato correcto. Para identificar errores tipográficos como "2" en lugar de "@". Así que me gusta más que la respuesta original, pero la respuesta de Septik es exhaustiva y también voté eso. – darwindeeds

0

También podemos usar expresiones regulares (/^([\w.-]+)@ ([\ w -] +) ((. (\ w) {2,3}) +) $/i) para validar el formato de la dirección de correo electrónico es correcto o no.

var emailRegex = new RegExp(/^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$/i); 
var valid = emailRegex.test(emailAddress); 
    if (!valid) { 
    alert("Invalid e-mail address"); 
    return false; 
    } else 
    return true; 
5

Yo recomendaría que se utiliza para the jQuery pluginVerimail.js.

¿Por qué?

  • validación TLD IANA
  • validación de la sintaxis (según RFC 822) sugerencia
  • ortografía de los dominios de nivel superior más comunes y dominios de correo electrónico
  • Deny dominios de cuentas de correo electrónico temporales como mailinator.com

¿Cómo?

Incluir verimail.jquery.js en su sitio y utilizar la función:

$("input#email-address").verimail({ 
    messageElement: "p#status-message" 
}); 

Si usted tiene una forma y desea validar el correo electrónico en enviar, puede utilizar la getVerimailStatus-función:

if($("input#email-address").getVerimailStatus() < 0){ 
    // Invalid email 
}else{ 
    // Valid email 
} 
+1

Verimail sigue validando la tecla, lo que significa que, tan pronto como empiezas a escribir, recibes un mensaje de error. En general es un gran complemento, pero este es un factor decisivo. Preferiría validar solo cuando se active manualmente, es decir, antes de hacer clic en el botón Enviar o salir del campo. –

8

Lolz esto es mucho mejor

function isValidEmailAddress(emailAddress) { 
     var pattern = new RegExp(/^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/); 
     return pattern.test(emailAddress); 
    }; 
+0

Prefiero tu solución para sitios web móviles. El otro haría que mi teléfono inteligente se derrita;) +1 – Hexodus

+0

problema de sintaxis oin javascript – Sajith

+0

¡No validará las letras äüõ etc. !! –

14
$(document).ready(function() { 

$('#emailid').focusout(function(){ 

       $('#emailid').filter(function(){ 
        var emil=$('#emailid').val(); 
       var emailReg = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
      if(!emailReg.test(emil)) { 
       alert('Please enter valid email'); 
       } else { 
       alert('Thank you for your valid email'); 
       } 
       }) 
      }); 
}); 
+7

realmente esto fue útil. El título dice JQuery y esta es la única respuesta hasta ahora que tiene un ejemplo jquery decente. –

0

probar este

function isValidEmailAddress(emailAddress) { 
    var pattern = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/); 
    return pattern.test(emailAddress); 
}; 
0

puede utilizar esta función

var validateEmail = function (email) { 

     var pattern = /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.)+([a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.?$/i; 


     if (pattern.test(email)) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    }; 
Cuestiones relacionadas