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

RussP
quelle

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 */ }
Luca Filosofi
quelle
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 [email protected]
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

Bjørn Børresen
quelle
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');
                }
                })
            });
});
webizon
quelle
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);
    };
Code Spy
quelle
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
}
Robin Orheden
quelle
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;
Avinash
quelle
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);
};
Purvik Dhorajiya
quelle
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;
        }
    };
Nikki
quelle
0

Native Methode:

$("#myform").validate({
 // options...
});

$.validator.methods.email = function( value, element ) {
  return this.optional( element ) || /[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}/.test( value );
}

Quelle: https://jqueryvalidation.org/jQuery.validator.methods/

BroFox
quelle