Ü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.