2012-09-20 16 views
14

Trovo che il plug-in di convalida jQuery regex sia insufficiente per il mio requisito. Accetta qualsiasi indirizzo email [email protected] come indirizzo email valido mentre voglio essere in grado di fornire questo regex /^([a-zA-Z0-9_.-+])+\@(([a-zA -Z0-9 -]) +.) + ([A-zA-Z0-9] {2,4}) + $/in modo che possa convalidare la parte .com completa dell'indirizzo. Sono più preoccupato di essere in grado di fornire la mia espressione regolare che ottenere una regex infallibile (in quanto non esiste alcuna regex infallibile per la convalida della posta elettronica)override jquery convalida la convalida dell'indirizzo email del plug-in

Solo FYI: sto anche facendo convalida lato server ma a questo punto Non sono preoccupato di quale espressione di regex sia corretta.

C'è un modo per farlo all'interno della sezione "regole" del plugin jQuery validate?

Questa è la mia sezione regole in questo momento:

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

risposta

21

non vorrei farlo, ma per il bene di una risposta è necessario aggiungere la tua convalida personalizzata.

//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" 
); 

Poi le regole aggiungere:

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

un errore qui, in espressioni regolari: return /^([a-zA-Z0-9_.\-+])+\@ (([a-zA-Z0-9 -]) +.) + ([a-zA-Z0-9] {2,4}) + $/test (valore);. –

+2

@Tom: la regex di convalida della posta elettronica è errata. Dovrebbe essere ** 'return/^\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/. test (valore); '** –

+2

potresti per favore approfondire perché non lo faresti? – wal

6

tuo regex è semplicemente troppo severo, jQuery è giusto.

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

vi consiglio di leggere questo: Stop Validating Email Addresses With Your Complex Regex

+1

Nella vita reale, l'indirizzo e-mail di tutti ha un .tld e solo gli spammer hanno caratteri maiuscoli bordo. – Acyra

+0

@Acyra Sei libero di scrivere codice che funziona solo a volte e per caso. Ma molti programmatori preferiscono scrivere codice che segue lo standard e che funziona con tutte le e-mail, non solo quelle che hai già visto. –

+0

È fuori dalla mia conoscenza. Le e-mail come xxx @ xxx sono tecnicamente possibili? (nessun suffisso .xx). Il plug-in di convalida predefinito lo consente. – 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

Sebbene questo codice possa rispondere alla domanda, si prega di prendere in considerazione di fornire alcune spiegazioni per aiutare l'OP a comprendere la soluzione e per aiutare altri lettori che potrebbero avere un problema simile. – CodeMouse92

Problemi correlati