Überprüfen von E-Mail-Adressen mit jQuery und Regex


174

Ich bin mir nicht sicher, wie ich das machen soll. Ich muss E-Mail-Adressen mithilfe von Regex wie folgt überprüfen:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[A-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)

Dann muss ich dies in einer jQuery-Funktion wie dieser ausführen:

$j("#fld_emailaddress").live('change',function() { 
var emailaddress = $j("#fld_emailaddress").val();

// validation here? 

if(emailaddress){}

// end validation

$j.ajax({  
        type: "POST",  
         url: "../ff-admin/ff-register/ff-user-check.php",  
        data: "fld_emailaddress="+ emailaddress,  
        success: function(msg)
        { 
            if(msg == 'OK') { 
            $j("#fld_username").attr('disabled',false); 
            $j("#fld_password").attr('disabled',false); 
            $j("#cmd_register_submit").attr('disabled',false); 
            $j("#fld_emailaddress").removeClass('object_error'); // if necessary
            $j("#fld_emailaddress").addClass("object_ok");
            $j('#email_ac').html('&nbsp;<img src="img/cool.png" align="absmiddle"> <font color="Green"> Your email <strong>'+ emailaddress+'</strong> is OK.</font>  ');
            } else {  
            $j("#fld_username").attr('disabled',true); 
            $j("#fld_password").attr('disabled',true); 
            $j("#cmd_register_submit").attr('disabled',true);  
            $j("#fld_emailaddress").removeClass('object_ok'); // if necessary
            $j("#fld_emailaddress").addClass("object_error");
            $j('#email_ac').html(msg);
            }
        }
     });
});

Wohin geht die Validierung und wie lautet der Ausdruck?


Antworten:


491

AKTUALISIERUNG


function isValidEmailAddress(emailAddress) {
    var pattern = /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.)+([a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.?$/i;
    return pattern.test(emailAddress);
}

if( !isValidEmailAddress( emailaddress ) ) { /* do stuff here */ }

2
danke aSeptik abgesehen von "fehlt" funktioniert das e von mailaddress gut ja weiß, dass kein regulärer Ausdruck 100% existiert, kann aber "ziemlich" nah kommen
RussP

1
habe das nicht zu tief validiert, aber es gab mir bereits ein falsches Positiv für asdf@adsf.com
gcb

@gcb: Hallo, wenn der reguläre Ausdruck nicht Ihren Anforderungen entspricht, können Sie ihn ändern, trotzdem habe ich ihn getestet und er funktioniert einwandfrei. jsfiddle.net/ADPaM
Luca Filosofi

14
Ein Regex allein auf der Clientseite weiß nicht, ob es einen Mailserver gibt oder ob die Domäne selbst existiert. Es wird lediglich geprüft, ob die Syntax einer E-Mail gültig ist oder nicht. Es hilft nur dem Benutzer, die richtige Adresse zu schreiben. Es ist keine Validierung.
BerggreenDK

Funktioniert perfekt! Danke Kumpel

28

Das ist meine Lösung:

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^[+a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i);
    // alert( pattern.test(emailAddress) );
    return pattern.test(emailAddress);
};

Gefunden, dass RegExp hier: http://mdskinner.com/code/email-regex-and-validation-jquery


3
Ihr Punkt über das Pluszeichen ist gültig, aber Ihr regulärer Ausdruck ist weniger besser als der, den ich in meinem Beispiel verwende. ps: ich habe meinen regulären Ausdruck so aktualisiert, dass er Pluszeichen unterstützt.
Luca Filosofi

In den meisten Fällen möchten Sie nur überprüfen, ob der Benutzer die E-Mail im richtigen Format eingegeben hat. Tippfehler wie "2" anstelle von "@" identifizieren. Ich mag das besser als die ursprüngliche Antwort, aber die Antwort von aSeptik ist umfassend und ich habe auch dafür gestimmt.
Darwindeeds

test @ gmail..com es heißt vaild - FALSCH, reguläre Ausdrücke ändern
htngapi

14
$(document).ready(function() {

$('#emailid').focusout(function(){

                $('#emailid').filter(function(){
                   var emil=$('#emailid').val();
              var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
            if( !emailReg.test( emil ) ) {
                alert('Please enter valid email');
                } else {
                alert('Thank you for your valid email');
                }
                })
            });
});

8
Eigentlich war das hilfreich. Der Titel sagt JQuery und dies ist die einzige Antwort, die bisher ein anständiges Beispiel für eine Abfrage enthält.
Taylor Mitchell

Dies validiert abc.b. @ yahoo.com
NoBullMan

7

Lolz das ist viel besser

    function isValidEmailAddress(emailAddress) {
        var pattern = new RegExp(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/);
        return pattern.test(emailAddress);
    };

Ich bevorzuge Ihre Lösung für mobile Websites. Der andere würde mein Smartphone zum Schmelzen bringen;) +1
Hexodus

Syntaxproblem in Javascript
Sajith

Äüõ etc Briefe werden nicht validiert !!
DAH

5

Ich würde empfehlen, dass Sie das jQuery-Plugin für Verimail.js verwenden .

Warum?

  • IANA TLD-Validierung
  • Syntaxvalidierung (gemäß RFC 822)
  • Rechtschreibvorschlag für die gängigsten TLDs und E-Mail-Domänen
  • Verweigern Sie temporäre E-Mail-Kontodomänen wie mailinator.com

Wie?

Fügen Sie verimail.jquery.js auf Ihrer Website und verwenden Sie die Funktion:

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

Wenn Sie ein Formular haben und die E-Mail beim Senden validieren möchten, können Sie die Funktion getVerimailStatus verwenden:

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

1
Verimail überprüft die Eingabe weiterhin. Sobald Sie mit der Eingabe beginnen, wird eine Fehlermeldung angezeigt. Im Allgemeinen ein großartiges Plugin, aber dieses ist ein Deal Breaker - ich würde es vorziehen, nur zu validieren, wenn es manuell ausgelöst wird, dh bevor ich auf die Schaltfläche "Senden" klicke oder das Feld verlasse.
Sebastian Schmid


0

Wir können auch reguläre Ausdrücke (/^([\w.-‹+)@([\w-‹+)((.(\w){2,3})+)$/i) verwenden, um die E-Mail-Adresse zu überprüfen Format ist korrekt oder nicht.

var emailRegex = new RegExp(/^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$/i);
 var valid = emailRegex.test(emailAddress);
  if (!valid) {
    alert("Invalid e-mail address");
    return false;
  } else
    return true;

0

Versuche dies

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
    return pattern.test(emailAddress);
};

0

Sie können diese Funktion verwenden

 var validateEmail = function (email) {

        var pattern = /^([a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+(\.[a-z\d!#$%&'*+\-\/=?^_`{|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+)*|"((([ \t]*\r\n)?[ \t]+)?([\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*(([ \t]*\r\n)?[ \t]+)?")@(([a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\d\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.)+([a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF][a-z\d\-._~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]*[a-z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])\.?$/i;


        if (pattern.test(email)) {
            return true;
        }
        else {
            return false;
        }
    };

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.