Xác thực địa chỉ email bằng jQuery và regex


174

Tôi không chắc chắn làm thế nào để làm điều này. Tôi cần xác thực địa chỉ email bằng regex với nội dung như sau:

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

Sau đó, tôi cần chạy cái này trong một hàm jQuery như thế này:

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

Xác nhận đi đâu và biểu thức là gì?


Câu trả lời:


491

CẬP NHẬT


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
nhờ aSeptik ngoài "mất tích" e từ mailaddress hoạt động tốt có biết rằng không có regex 100% tồn tại, nhưng có thể nhận được "khá" chặt chẽ
RussP

1
đã không xác nhận điều đó quá sâu, nhưng nó đã cho tôi kết quả dương tính giả với asdf@adsf.com
gcb

@gcb: hi, nếu regex không thỏa mãn nhu cầu của bạn, bạn có thể thay đổi nó, dù sao tôi cũng đã thử nghiệm và nó hoạt động tốt. jsfiddle.net/ADPaM
Luca Filosofi

14
một regex một mình trên máy khách, không biết có máy chủ thư hay không nếu tên miền tồn tại. nó hoàn toàn kiểm tra xem cú pháp của bất kỳ email nào là hợp lệ hay không. Nó chỉ để giúp người dùng viết địa chỉ chính xác. nó không phải là một xác nhận
BerggreenDK

Hoạt động hoàn hảo! Cảm ơn người bạn đời

28

Đây là giải pháp của tôi:

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

Tìm thấy rằng RegExp ở đây: http://mdskinner.com/code/email-regex-and-validation-jquery


3
quan điểm của bạn về dấu cộng là hợp lệ, nhưng biểu thức chính quy của bạn kém hơn so với dấu tôi đang sử dụng trong ví dụ của tôi. ps: tôi đã cập nhật regex của mình để hỗ trợ dấu cộng.
Luca Filosofi

Hầu hết các lần bạn chỉ muốn xác thực rằng người dùng đã nhập email theo đúng định dạng. Để xác định lỗi chính tả như "2" thay vì "@". Vì vậy, tôi thích điều này hơn câu trả lời ban đầu nhưng câu trả lời của aSeptik là toàn diện và tôi cũng đã bình chọn nó.
darwindeed

test @ gmail..com nó nói là vaild - SAI, thay đổi biểu thức chính quy
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
thực sự điều này rất hữu ích Tiêu đề nói JQuery và đây là câu trả lời duy nhất cho đến nay có một ví dụ jquery đàng hoàng.
Taylor Mitchell

điều này xác nhận abc.b. @ yahoo.com
NoBullMan

7

Lolz này tốt hơn nhiều

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

Tôi thích giải pháp của bạn cho các trang web di động. Một cái khác sẽ làm cho điện thoại thông minh của tôi tan chảy;) +1
Hexodus

vấn đề cú pháp oin javascript
Sajith

Nó sẽ không xác nhận các chữ cái äüõ vv !!
DAH

5

Tôi khuyên bạn nên sử dụng plugin jQuery cho Verimail.js .

Tại sao?

  • Xác nhận IANA TLD
  • Xác thực cú pháp (theo RFC 822)
  • Gợi ý chính tả cho các TLD và tên miền email phổ biến nhất
  • Từ chối tên miền tài khoản email tạm thời như mailinator.com

Làm sao?

Bao gồm verimail.jquery.js trên trang web của bạn và sử dụng chức năng:

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

Nếu bạn có một biểu mẫu và muốn xác thực email khi gửi, bạn có thể sử dụng hàm getVerimailStatus:

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

1
Verimail tiếp tục xác thực trên keyup, có nghĩa là, ngay khi bạn bắt đầu nhập, bạn sẽ nhận được thông báo lỗi. Nói chung là plugin tuyệt vời, nhưng đây là một công cụ thỏa thuận - tôi chỉ muốn xác thực khi được kích hoạt bằng tay, tức là trước khi nhấp vào nút gửi hoặc rời khỏi trường.
Sebastian Schmid


0

Chúng tôi cũng có thể sử dụng biểu thức chính quy (/ ^ ([\ w.- [+) @ ([\ w-[+) ((. (\ W) nb2,3 Bolog)+)$ / i) để xác thực địa chỉ email định dạng có đúng hay không.

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

Thử cái này

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

bạn có thể sử dụng chức năng này

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.