2012-09-20 6 views
14

Ich finde, dass jQuery Validierung Plugin Regex für meine Anforderung unzureichend sein. Es akzeptiert jede E-Mail-Adresse [email protected] als eine gültige E-Mail-Adresse, während ich in der Lage sein möchte, diese Regex /^([a-zA-Z0-9_.-+])+\@(([a-zA -Z0-9 -]) +.) + ([A-zA-Z0-9] {2,4}) + $ /, damit der vollständige .com-Teil der Adresse validiert wird. Ich bin mehr besorgt über die Möglichkeit, meine eigenen Regex zu liefern, als eine narrensichere Regex (wie es keine narrensichere Regex für die E-Mail-Validierung ist)override jquery validieren Plugin E-Mail-Adresse Validierung

Nur zur Info: Ich mache auch Server-Validierung, aber an dieser Stelle Ich mache mir keine Gedanken darüber, welche E-Mail-Adresse Regex richtig ist.

Gibt es eine Möglichkeit, dies innerhalb der "Regeln" Abschnitt von jQuery Plugin zu überprüfen?

Dies ist meine Regeln Abschnitt jetzt:

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

Antwort

21

Ich würde das nicht tun, aber im Interesse einer Antwort, die Sie benötigen, um Ihre eigene benutzerdefinierte Validierung hinzuzufügen.

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

dann auf Ihre Regeln hinzufügen:

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

ein Fehler hier, in Regex: zurück /^([a-zA-Z0-9_.\-+])+\@@ (([a-zA-Z0-9 -]) +.) + ([a-zA-Z0-9] {2,4}) + $/.test (Wert); –

+2

@Tom: E-Mail-Validierung Regex ist falsch. Es sollte ** 'return /^\w+([-+.']\w+)*@\w+([-.]\w+)*\.w.w+([-.]\w+)*$/ sein. Test (Wert); '** –

+2

Könnten Sie bitte erläutern, warum Sie das nicht tun würden? – wal

6

Ihre regex ist einfach zu streng, jQuery ist richtig.

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

Ich schlage vor, Sie dies zu lesen: Stop Validating Email Addresses With Your Complex Regex

+1

Im wirklichen Leben jeder E-Mail-Adresse hat eine .tld und nur Spammer haben Rand Buchstaben. – Acyra

+0

@Acyra Sie können Code schreiben, der nur manchmal und aus Versehen funktioniert. Aber viele Programmierer ziehen es vor, einen Code zu schreiben, der dem Standard entspricht und mit allen E-Mails funktioniert, nicht nur mit denen, die Sie bereits gesehen haben. –

+0

Es ist aus meinem Wissen heraus. Ist eine E-Mail wie xxx @ xxx technisch möglich? (Nr. .xx Suffix). Das Standardvalidierungs-Plugin erlaubt dies. – 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

Während dieser Code die Frage beantworten kann, bitten wir Sie, einige Erklärungen zu geben, um dem OP zu helfen, die Lösung zu verstehen und anderen Lesern zu helfen, die ein ähnliches Problem haben könnten. – CodeMouse92