2009-06-02 16 views
66

¡Por el amor de Dios no estoy obteniendo este código fácil para trabajar! Siempre está alertando "nulo", lo que significa que la cadena no coincide con la expresión.JavaScript Expresión de correo electrónico de expresión regular

var pattern = "^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,3}$"; 

function isEmailAddress(str) { 

    str = "[email protected]";  

    alert(str.match(pattern)); 
    return str.match(pattern);  

} 
+5

validación de correo electrónico es difícil . Pragmáticamente, solo puedes asumir que contiene un @ y que hay al menos uno. seguir el @ en algún lugar pero eso es todo si quieres evitar alienar al menos a algunos de tus usuarios. A menos que esté validando para un dominio específico donde la política de nombres de correo electrónico está más estructurada. – AnthonyWJones

+0

Estrictamente hablando, no puedes asumir que hay una. algun lado. Vea, por ejemplo, el ua ccTLD, que tiene registros MX en el nivel superior. – Ian

+0

¿Por qué no puedes simplemente usar type = "email" dentro del formulario? @azamsharp –

Respuesta

60

Si se define la expresión regular como una cadena a continuación, todas las barras invertidas necesita ser escapado, por lo que en lugar de '\ w' debe tener '\\ w'.

Alternativamente, definirla como una expresión regular:

var pattern = /^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,3}$/; 

Por cierto, por favor no valida las direcciones de correo electrónico en el lado del cliente. Su expresión regular es demasiado simple para pasar de una implementación sólida de todos modos.

ver la cosa real aquí: http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

+28

Esta expresión regular no admite direcciones como [email protected] –

+0

Esto no es para ninguna aplicación de producción. Esto es para una pequeña demostración que estoy creando. ¡Gracias por señalar eso! – azamsharp

+6

no admite correos electrónicos como [email protected] –

9

Usted puede estar interesado en this question (o this one), que pone de relieve el hecho de que la identificación de direcciones de correo electrónico válidas a través de las expresiones regulares es un problema muy difícil de resolver (si es que lo solucionable)

5

Puede estar interesado en echar un vistazo a este page que enumera expresiones regulares para validar la dirección de correo electrónico que cubre casos más generales.

13

He estado usando esta función durante un tiempo. devuelve un valor booleano.

// Validates email address of course. 
function validEmail(e) { 
    var filter = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/; 
    return String(e).search (filter) != -1; 
} 
+1

Sé que esto es antiguo, pero esto se puede simplificar a: return String (e) .match (/^\ s * [\ w \ - \ + _] + (?: \. [\ W \ - \ + _ ] +) * \ @ [\ w \ - \ + _] + \. [\ w \ - \ + _] + (?: \. [\ w \ - \ + _] +) * \ s * $ /); Devolverá nulo si no coincide y una única matriz de elemento de la dirección de correo electrónico si coincide. – Andir

+0

Creo que su expresión regular no valida, digamos, nicolas. @ Gmail.com ... ¿Es compatible con RFC822? No estoy seguro. ¿Alguien para validar? – nembleton

26

este es el que estoy usando en mi página.

http://www.zparacha.com/validate-email-address-using-javascript-regular-expression/

/^[a-zA-Z0-9._-][email protected][a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/

+1

No es compatible con el direccionamiento '+', es decir, "[email protected]". –

+0

Esto no funcionará para algunos de los [nuevos dominios] (http://www.names.co.uk/domain-names/new-domain-extensions#domain-directory) – GP89

+0

Bien hecho y gracias. Este es uno de los mejores que he visto. – RushVan

0

Hay que tener en cuenta que a-z, A-Z, 0-9, _ y -. No son los únicos caracteres válidos en el inicio de una dirección de correo electrónico.

Gmail, por ejemplo, le permite colocar un signo "+" en la dirección para "falsificar" un correo electrónico diferente (por ejemplo, [email protected] también recibirá un correo electrónico enviado a [email protected]).

micky.o'[email protected] no agradecería que su código les detenga al ingresar su dirección ... los apóstrofos son perfectamente válidos en las direcciones de correo electrónico.

El Cierre "cheque" de una dirección válida de correo electrónico se ha mencionado anteriormente es, como ella misma indica, bastante ingenuo:

http://code.google.com/p/closure-library/source/browse/trunk/closure/goog/format/emailaddress.js#198

recomiendo estar muy abierto en el código del lado del cliente, y luego mucho más De peso pesado, como enviar un correo electrónico con un enlace para comprobar realmente que es "válido" (como sintácticamente válido para su proveedor, y tampoco está mal escrito).

Algo como esto:

var pattern = /[^@][email protected][-a-z\.]\.[a-z\.]{2,6}/

Teniendo en cuenta que teóricamente puede tener dos @ señales en una dirección de correo electrónico, y ni siquiera ha incluido caracteres latin1 más allá de los nombres de dominio!

http://www.eurid.eu/en/eu-domain-names/idns-eu

http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx

2

También puede probar esta expresión, que han probado contra muchas direcciones de correo electrónico.

var pattern = /^[A-Za-z0-9._%+-][email protected]([A-Za-z0-9-]+\.)+([A-Za-z0-9]{2,4}|museum)$/; 
5

La validación del correo electrónico es fácil de equivocarse. Por lo tanto, le recomiendo que use Verimail.js.

¿Por qué?

  • validación de la sintaxis (de acuerdo con RFC 822).
  • validación TLD IANA
  • sugerencia
  • ortografía de los dominios de nivel superior más comunes y dominios de correo electrónico
  • Denegar dominios de cuentas de correo electrónico temporales como mailinator.com
  • jQuery plugin support

Otra gran cosa con Verimail.js es que tiene una sugerencia de ortografía para los dominios de correo electrónico más comunes y los TLD registrados. Esto puede reducir drásticamente el porcentaje de abandonos para los usuarios que escriben mal los nombres de dominio comunes como gmail.com, hotmail.com, aol.com, aso ..

Ejemplo:

¿Cómo usarlo?

La manera más fácil es descargar e incluir verimail.jquery.js en su página. Después de eso, pero su instalación Verimail ejecutando la siguiente función en la entrada de la caja que necesita la validación:

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

El elemento de mensaje es un elemento opcional que muestra un mensaje como "E-mail incorrecto .." o "Did quieres decir [email protected]? ".Si usted tiene una forma y sólo desea continuar si el correo electrónico se verifica, puede utilizar la función getVerimailStatus como se muestra a continuación:

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

El getVerimailStatus-función devuelve un código entero de acuerdo con el objeto Comfirm.AlphaMail.Verimail .Estado. Como se muestra arriba, si el estado es un valor entero negativo, entonces la validación debe tratarse como un error. Pero si el valor es mayor o igual a 0, entonces la validación debe tratarse como un éxito.

3

He estado usando éste ....

/^[\w._-]+[+]?[\w._-][email protected][\w.-]+\.[a-zA-Z]{2,6}$/ 

Permite que + antes @([email protected])

+0

¡Este es el único patrón aquí, que realmente funciona! – tborychowski

+0

No, hay tld de dominio de más de 6 caracteres, como '.software' por ejemplo. –

8
function isEmailAddress(str) { 
    var pattern =/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/; 
    return pattern.test(str); // returns a boolean 
} 
+0

según este 'test @ test.info' no es un correo electrónico – tborychowski

0

validación de correo electrónico simple pero potente para la sintaxis de verificación de correo electrónico:

var EmailId = document.getElementById('Email').value; 
var emailfilter = /^[\w._-]+[+]?[\w._-][email protected][\w.-]+\.[a-zA-Z]{2,6}$/; 
if((EmailId != "") && (!(emailfilter.test(EmailId)))) { 
    msg+= "Enter the valid email address!<br />"; 
} 
+0

' test @ test.info' devuelve falso – tborychowski

7

So La mayor parte de la página de registro e inicio de sesión debe validar el correo electrónico. En este ejemplo, aprenderá la validación simple de correo electrónico. primero a tener una entrada de texto en html y una entrada de botón como éste

<input type='text' id='txtEmail'/> 
<input type='submit' name='submit' onclick='checkEmail();'/> 

<script> 
    function checkEmail() { 
     var email = document.getElementById('txtEmail'); 
     var filter = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
     if (!filter.test(email.value)) { 
      alert('Please provide a valid email address'); 
      email.focus; 
      return false; 
     } 
    } 
</script> 

también se puede comprobar el uso de esta expresión regular

<input type='text' id='txtEmail'/> 
<input type='submit' name='submit' onclick='checkEmail();'/> 

<script> 
    function checkEmail() { 

     var email = document.getElementById('txtEmail'); 
     var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; 

     if (!filter.test(email.value)) { 
      alert('Please provide a valid email address'); 
      email.focus; 
      return false; 
     } 
    } 
</script> 

Marque esta producción de demostración que se puede comprobar aquí

function checkEmail() { 
 
     var email = document.getElementById('txtEmail'); 
 
     var filter = /^(([^<>()\[\]\\.,;:\[email protected]"]+(\.[^<>()\[\]\\.,;:\[email protected]"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
 
     if (!filter.test(email.value)) { 
 
      alert('Please provide a valid email address'); 
 
      email.focus; 
 
      return false; 
 
     } 
 
    }
<input type='text' id='txtEmail'/> 
 
<input type='submit' name='submit' onclick='checkEmail();'/>

si el correo electrónico no es válido, luego envíe un mensaje de alerta, si es válido, luego no hay un mensaje de alerta. para obtener más información acerca de expresiones regulares

https://www.w3schools.com/jsref/jsref_obj_regexp.asp

esperemos que le ayudará a

+0

¿Cuál es el punto del '{2,4}' si tiene un '+' después de él? – developerbmw

+0

y luego mostrará un correo electrónico no válido, ¿me puede dar una dirección de correo electrónico de muestra? –

7

con más sencilla

Aquí está:

var regexEmail = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/; 
var email = document.getElementById("txtEmail"); 

if (regexEmail.test(email.value)) { 
    alert("It's Okay") 
} else { 
    alert("Not Okay") 

} 

buena suerte.

+0

en el momento de escribir esto, esto funcionó bien ... esperemos que siga siendo así, ya que he pasado por algunos de estos;) –

+1

'HUEI90 @ gmail.com'' pasará este patrón, pero añadiendo^=> '/^\ w + ([- +. '] \ w +) * @ \ w + ([-.] \ w +) * \. \ w + ([-.] \ w +) * /' puede arreglar el problema –

0
var emailRegex = /^[A-Z0-9_'%=+!`#~$*?^{}&|-]+([\.][A-Z0-9_'%=+!`#~$*?^{}&|-]+)*@[A-Z0-9-]+(\.[A-Z0-9-]+)+$/i; 
if(emailRegex.test('yoursamplemail')) 
alert('valid'); 
else 
alert('invalid'); 
-1

Usted puede agregar una función a la cadena de objetos

//Add this wherever you like in your javascript code 
String.prototype.isEmail = function() { 
    return !!this.match(/^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,3}$/); 
} 

var user_email = "[email protected]"; 

if(user_email.isEmail()) { 
    //Email is valid ! 
} else { 
    //Email is invalid ! 
} 
2

poco tarde a la fiesta, pero aquí va nada ...

function isEmailValid(emailAdress) { 
    var EMAIL_REGEXP = new RegExp('^[a-z0-9]+(\.[_a-z0-9]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,15})$', 'i'); 
    return EMAIL_REGEXP.test(emailAdress) 
} 

http://jsfiddle.net/yrshaikh/xvd6H/

+0

'a @ c om' no es un correo electrónico válido y pasa este patrón – tborychowski

+0

esta expresión regular no se probó exhaustivamente. – Brandon

+0

@Brandon ok y? – Yasser

Cuestiones relacionadas