Memvalidasi alamat email menggunakan jQuery dan regex

174

Saya tidak terlalu yakin bagaimana melakukan ini. Saya perlu memvalidasi alamat email menggunakan regex dengan sesuatu seperti ini:

[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)

Maka saya perlu menjalankan ini dalam fungsi jQuery seperti ini:

$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);
            }
        }
     });
});

Kemana perginya validasi dan apa ekspresinya?

RussP
sumber

Jawaban:

491

PEMBARUAN


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
sumber
2
terima kasih aSeptik terlepas dari "hilang" e dari mailaddress berfungsi dengan baik ya tahu bahwa tidak ada regex 100% ada, tetapi bisa mendapatkan "cantik" dekat
RussP
1
tidak memvalidasi itu terlalu dalam, tetapi sudah memberi saya false positive untuk [email protected]
gcb
@ gcb: hai, jika regex tidak memenuhi kebutuhan Anda, Anda dapat mengubahnya, toh saya telah mengujinya dan berfungsi dengan baik. jsfiddle.net/ADPaM
Luca Filosofi
14
sebuah regex sendirian di sisi klien, tidak tahu apakah ada server surat atau apakah domain itu sendiri ada. itu hanya memeriksa apakah sintaksis email mana pun valid atau tidak. Ini hanya untuk membantu pengguna menulis alamat yang benar. ini bukan validasi.
BerggreenDK
Bekerja dengan sempurna! Terima kasih sobat
28

Ini solusi saya:

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);
};

Menemukan RegExp di sini: http://mdskinner.com/code/email-regex-and-validation-jquery

Bjørn Børresen
sumber
3
poin Anda tentang tanda plus valid, tetapi regex Anda kurang lebih baik daripada yang saya gunakan dalam contoh saya. ps: saya telah memperbarui regex saya untuk mendukung tanda plus.
Luca Filosofi
Sering kali Anda hanya ingin memvalidasi bahwa pengguna memasukkan email dalam format yang tepat. Untuk mengidentifikasi kesalahan ketik seperti "2" alih-alih "@". Jadi saya suka ini lebih baik daripada jawaban asli tetapi jawaban aSeptik komprehensif dan saya memilih itu juga.
darwindeeds
test @ gmail..com dikatakan vaild - SALAH, ubah ekspresi reguler
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
sumber
8
sebenarnya ini sangat membantu. Judulnya mengatakan JQuery dan ini adalah satu-satunya jawaban sejauh ini yang memiliki contoh jquery yang layak.
Taylor Mitchell
ini memvalidasi abc.b. @ yahoo.com
NoBullMan
7

Lolz ini jauh lebih baik

    function isValidEmailAddress(emailAddress) {
        var pattern = new RegExp(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/);
        return pattern.test(emailAddress);
    };
Kode Mata-mata
sumber
Saya lebih suka solusi Anda untuk situs web seluler. Yang lain akan membawa smartphone saya mencair;) +1
Hexodus
masalah sintaksis pada javascript
Sajith
Itu tidak akan memvalidasi äüõ dll surat !!
DAH
5

Saya akan merekomendasikan Anda menggunakan plugin jQuery untuk Verimail.js .

Mengapa?

  • Validasi IANA TLD
  • Validasi sintaksis (menurut RFC 822)
  • Saran pengejaan untuk TLD dan domain email paling umum
  • Tolak domain akun email sementara seperti mailinator.com

Bagaimana?

Sertakan verimail.jquery.js di situs Anda dan gunakan fungsinya:

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

Jika Anda memiliki formulir dan ingin memvalidasi email saat kirim, Anda dapat menggunakan fungsi getVerimailStatus:

if($("input#email-address").getVerimailStatus() < 0){
    // Invalid email
}else{
    // Valid email
}
Robin Orheden
sumber
1
Verimail terus memvalidasi pada keyup, yang berarti, segera setelah Anda mulai mengetik, Anda mendapatkan pesan kesalahan. Umumnya plugin yang bagus, tetapi yang ini adalah pemecah masalah - Saya lebih suka memvalidasi hanya ketika dipicu secara manual, yaitu sebelum mengklik tombol kirim atau meninggalkan bidang.
Sebastian Schmid
0

Kita juga dapat menggunakan persamaan reguler (/^([\w.-[+)@([\w-[+)((.(\w){2,3})+)$/i) untuk memvalidasi alamat email formatnya benar atau tidak.

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
sumber
0

Coba ini

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
sumber
0

Anda dapat menggunakan fungsi ini

 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
sumber
0

Metode asli:

$("#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 );
}

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

BroFox
sumber