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?


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 */ }

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 asdf@adsf.com
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


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

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

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
}

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;

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.