2012-09-20 15 views
14

Me parece que el complemento de validación jQuery regex es insuficiente para mis requerimientos. Acepta cualquier dirección de correo electrónico [email protected] como una dirección válida de correo electrónico, mientras que yo quiero poder proporcionar esta expresión regular /^([a-zA-Z0-9_.-+])+\@((aazzA -Z0-9 -]) +.) + ([A-zA-Z0-9] {2,4}) + $/para que valide la parte .com completa de la dirección. Estoy más preocupado por poder suministrar mi propia expresión regular que obtener una expresión regular a prueba de tontos (ya que no hay una expresión falsa para la validación de correo electrónico)anula jquery validate complemento de validación de dirección de correo electrónico

Solo FYI: también estoy validando el lado del servidor, pero en este punto No estoy preocupado acerca de qué dirección de correo electrónico regex es correcta.

¿Hay alguna manera de hacerlo dentro de la sección de "reglas" del complemento jQuery validate?

Ésta es mi sección de reglas en este momento:

rules: { 
         email: { 
          required: { 
            depends:function(){ 
             $(this).val($.trim($(this).val())); 
             return true; 
            } 
           }, 
          email: true 
         }, 

Respuesta

21

yo no haría esto, pero por el bien de una respuesta que necesita añadir su validación personalizada.

//custom validation rule 
$.validator.addMethod("customemail", 
    function(value, element) { 
     return /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(value); 
    }, 
    "Sorry, I've enabled very strict email validation" 
); 

A continuación, a las reglas de añadir:

rules: { 
        email: { 
         required: { 
           depends:function(){ 
            $(this).val($.trim($(this).val())); 
            return true; 
           } 
          }, 
         customemail: true 
        }, 
+0

un error aquí, en regex: return /^([a-zA-Z0-9_.\-+])+\@ (([a-zA-Z0-9 -]) +.) + ([a-zA-Z0-9] {2,4}) + $ /. prueba (valor); –

+2

@Tom: la validación de correo electrónico regex es incorrecta. Debería ser ** 'return /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/. prueba (valor); '** –

+2

¿podría explicar por qué no haría esto? – wal

6

Su expresión regular es simplemente demasiado estricta, jQuery es correcto.

"this is a valid adress !"@yes.it.is 

sugiero que lea esto: Stop Validating Email Addresses With Your Complex Regex

+1

En la vida real, dirección de correo electrónico de todo el mundo tiene un .tld y sólo los spammers tienen caracteres en el borde. – Acyra

+0

@Acyra Eres libre de escribir código que funciona solo algunas veces y por accidente. Pero muchos codificadores prefieren escribir código que sigue el estándar y que funciona con todos los correos electrónicos, no solo los que ya has visto. –

+0

Es de mi conocimiento. ¿Es el correo electrónico como xxx @ xxx técnicamente posible? (no sufijo .xx). El complemento de validación predeterminado lo permite. – Mark

0
// Add Custom Email Validation 
jQuery.validator.addMethod('customemail', function (emailaddr, element) { 
     emailaddr = emailaddr.replace(/\s+/g, ''); 
     return this.optional(element) || 
     emailaddr.match(/^\b[A-Z0-9._%-][email protected]@[A-Z0-9.-]+\.[A-Z]{2,4}\b$/i); 
}); 
+0

Si bien este código puede responder a la pregunta, considere brindar alguna explicación para ayudar al OP a comprender la solución y ayudar a otros lectores que puedan tener un problema similar. – CodeMouse92

Cuestiones relacionadas