2014-02-12 20 views
22

Ich versuche, den Eingang für E-Mail über JQuery zu validieren:JQuery Wert Match Regex

Mein JQuery

<script> 
/* <![CDATA[ */ 
    jQuery(function(){ 
    $(".mail").keyup(function() { 
    var VAL = $(this).val(); 
    var email = new RegExp(^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$); 

    if(VAL.test(email)){ 
    alert('Great, you entered an E-Mail-address'); 
    } 
    }); 
    }); 
    /* ]]> */ 
    </script> 

Dies wird nicht einmal warnen, obwohl ich [email protected] eingetragen. Ich habe bereits versucht .test() und .match(), was habe ich falsch gemacht?

+0

ich weiß, erstellen nicht, aber Sie eine E-Mail entsprechen kann diese Regex \ w + verwenden ([- +. '] \ w +) * @ \ w + ([-.] \ w +) * \. \ w + ([-.] \ w +) * – Amitesh

+0

Sie sollten die Konsole immer geöffnet lassen. Sie hätten einen Syntaxfehler bemerkt. – dfsq

+0

Bitte lesen Sie DOC, Sie missbrauchen test() -Methode und es gibt Syntaxfehler. Zeige minimalen Aufwand, um dein Problem zu lösen, bevor du die Frage stellst –

Antwort

47
  • eine Zeichenfolge RegExp Pass oder einen regulären Ausdruck mit dem // Syntax
  • Anruf regex.test(string), nicht string.test(regex)

So

jQuery(function() { 
    $(".mail").keyup(function() { 
     var VAL = this.value; 

     var email = new RegExp('^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$'); 

     if (email.test(VAL)) { 
      alert('Great, you entered an E-Mail-address'); 
     } 
    }); 
}); 
+4

Du kannst 'this.value' anstelle von verwenden '$ (this) .val()'. –

+3

Beachten Sie, dass dies keine Kleinbuchstaben akzeptiert. – Mariano

+0

Es ist ein Fall-sensitive Ausdruck, so dass 'abc @ abc.abc' nicht akzeptiert wird, während 'ABC @ ABC.ABC' genehmigt ist. Sie können es ändern in ''^[a-zA-Z0-9 ._% + -] + @ [a-zA-Z0-9 .-] + \. [A-zA-Z] {2,4} $ ''um das Problem zu lösen, aber es gibt ein anderes Problem, in diesem Regex' abc @ abcd' ohne jeden Punkt wird akzeptiert! Ich schlage stattdessen folgendes vor: "/^\ w + @ [a-zA-Z _] +? \. [A-zA-Z] {2,3} $/g", aber keiner dieser Ausdrücke akzeptiert eine E-Mail-Adresse, wenn sie dort ist ist ein Bindestrich im Domain-Namen wie: 'abc @ abc-abc.com', besuchen Sie diese Seite für die beste Regex: [link] (https://stackoverflow.com/questions/46155/how-to-validate-email- Adresse in Javascript –

9

ändern es dazu:

var email = /^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}$/i; 

Dies ist ein regulärer Ausdruck wörtlichen dass die i Flag übergeben wird, die Groß- und Kleinschreibung zu sein bedeutet.

Denken Sie daran, dass die Validierung der E-Mail-Adresse hart ist (es gibt einen 4- oder 5-seitigen regulären Ausdruck am Ende von Mastering Regular Expressions, der dies demonstriert) und Ihr Ausdruck wird sicher nicht alle gültigen E-Mail-Adressen erfassen.