Xác thực email bằng jQuery


356

Tôi mới sử dụng jQuery và đang tự hỏi làm thế nào để sử dụng nó để xác thực địa chỉ email.


Trước khi thử "xác thực" một địa chỉ email, bạn nên đọc địa chỉ này: hackernoon.com/
Kẻ

Câu trả lời:


703

Bạn có thể sử dụng javascript cũ thường xuyên cho điều đó:

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}

66
Đúng vậy, hãy nhớ jQuery vẫn là javascript :)
Fabian

36
Mặc dù regrec này coi hầu hết các địa chỉ trong thế giới thực là hợp lệ, nó vẫn có rất nhiều mặt tích cực và phủ định sai. Chẳng hạn, xem các ví dụ về địa chỉ email hợp lệ và không hợp lệ trên Wikipedia.
Asen

1
@Umingo email@127.0.0.1 vẫn là email hợp lệ, tuy nhiên, nó vẫn có thể được viết theo cách tốt hơn. Không có phần nào của miền có thể bắt đầu bằng char khác ngoài [a-z0-9] (không phân biệt chữ hoa chữ thường). Ngoài ra, e-mail hợp lệ (và tên miền) có một số giới hạn len, cũng không được kiểm tra.
tomis

10
Với các tên miền cấp cao mới trở nên phổ biến hơn, regex này có thể cần sửa đổi .systems và .poker, v.v ... đều là các TLD hợp lệ ngay bây giờ nhưng sẽ thất bại trong việc kiểm tra regex
Liath

3
Mỗi lần bình luận Theo về câu trả lời khác, bạn nên thay đổi var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;để var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,6})+$/;hỗ trợ .museum TLD mới của như thế nào, vv
Ira Herman

164

Hàm jQuery để xác thực email

Tôi thực sự không thích sử dụng plugin, đặc biệt khi biểu mẫu của tôi chỉ có một trường cần được xác thực. Tôi sử dụng chức năng này và gọi nó bất cứ khi nào tôi cần xác thực một trường mẫu email.

 function validateEmail($email) {
  var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
  return emailReg.test( $email );
}

và bây giờ để sử dụng này

if( !validateEmail(emailaddress)) { /* do stuff here */ }

Chúc mừng!


16
Bạn chỉ nên quay lạiemailReg.test($email);
nffdiogosilva

7
Chỉ cần FYI này trả về đúng cho một địa chỉ email trống. ví dụ emailReg.text("") true. Tôi chỉ đơn giản là chức năng xuống khai báo của emailReg var sau đó:return ( $email.length > 0 && emailReg.test($email))
Diziet

14
Regex để kiểm tra tính hợp lệ của địa chỉ email đã lỗi thời vì chúng tôi hiện có tiện ích mở rộng tên miền với 6 ký tự như .museum, do đó bạn muốn đổi var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;thànhvar emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,6})?$/;
Theo

3
đúng bạn là @ h.coates! Tôi đã đến với chủ đề này với hy vọng tìm thấy rằng jQuery thực sự có một xác thực email tích hợp. Di chuyển theo, đây không phải là droids bạn đang tìm kiếm ...
iGanja

3
Quan điểm của @ Theo là rất quan trọng, nhưng độ dài thực tế của TLD phải lớn hơn 6, giới hạn trên lý thuyết cho phần mở rộng là 63 ký tự. hiện tại cái dài nhất là hơn 20, xem dữ liệu.iana.org / TLD / tlds
alpha

41

Tôi sẽ sử dụng plugin xác thực jQuery vì một vài lý do.

Bạn xác nhận, ok tuyệt vời, bây giờ những gì? Bạn cần hiển thị lỗi, xử lý xóa nó khi nó hợp lệ, hiển thị tổng cộng có bao nhiêu lỗi? Có rất nhiều thứ nó có thể xử lý cho bạn, không cần phải phát minh lại bánh xe.

Ngoài ra, một lợi ích to lớn khác là nó được lưu trữ trên CDN, phiên bản hiện tại tại thời điểm trả lời này có thể được tìm thấy ở đây: http://www.asp.net/ajaxL Library / CDNjQueryValidate16.ashx Điều này có nghĩa là thời gian tải nhanh hơn cho máy khách.


6
Ok ... không cần phải phát minh lại bánh xe. Nhưng tại sao tôi phải cài đặt hàng tá KByte Javascript để xác thực một trường. Nó giống như xây dựng một nhà máy ô tô nếu tất cả những gì bạn cần là một bánh xe mới :)
kraftb

3
@kraftb Như đã nói trong câu trả lời của tôi, đó là cách xử lý và hiển thị xung quanh việc xác thực, không chỉ là xác thực văn bản.
Nick Craver

5
Cảm ơn vì điều này @NickCraver: Đây thực sự có vẻ là một cách tiếp cận "thực tiễn tốt nhất" cho vấn đề xử lý xác thực cho một email. Điều này chắc chắn nhất là KHÔNG giống như xây dựng một nhà máy (viết lên các lib để làm tất cả công việc) để có được một bánh xe. Nó giống như làm theo hướng dẫn từ nhà máy để lắp đặt bánh xe trên một chiếc xe hiện đại (kích xe lên, đặt bánh xe - đeo đai ốc) thay vì cố gắng tìm ra cách lấy bánh xe trên xe của bạn. Plugin này siêu đơn giản để sử dụng. Để thực hiện xác nhận mẫu, nó thực sự bao gồm, một số chú thích và một cuộc gọi phương thức duy nhất.
jfgrissom

3
Bây giờ bạn đang phát minh lại ẩn dụ 'phát minh lại bánh xe'!
Dom Vinyard

Đối với những người bị mắc kẹt khi làm việc trên các ứng dụng webforms encosia.com/USE-jquery-validation-with-asp-net-webforms
Jerreck

38

Nhìn vào http: //bassistance.de/jquery-plugins/jquery-plugin-validation/ . Đây là một plugin jQuery đẹp, cho phép xây dựng hệ thống xác nhận mạnh mẽ cho các biểu mẫu. Có một số mẫu hữu ích ở đây . Vì vậy, xác thực trường email trong biểu mẫu sẽ trông như vậy:

$("#myform").validate({
  rules: {
    field: {
      required: true,
      email: true
    }
  }
});

Xem tài liệu phương pháp Email để biết chi tiết và mẫu.


1
Người cuối cùng vẫn còn sống)
Andrew Bashtannik

6
nhưng định dạng được chấp nhận là x@x(đó là lạ) nó phải làm x@x.xthế nào tôi có thể sửa nó?
Basheer AL-MOMani

2
@ BasheerAL-MOMani [ jqueryvalidation.org/jQuery.validator.methods/] $.validator.methods.email = function( value, element ) { return this.optional( element ) || //^.+@.+\..+$/.test( value ); }
Bill Gillingham

17
<script type="text/javascript">
    $(document).ready(function() {
      $('.form_error').hide();
      $('#submit').click(function(){
           var name = $('#name').val();
           var email = $('#email').val();
           var phone = $('#phone').val();
           var message = $('#message').val();
           if(name== ''){
              $('#name').next().show();
              return false;
            }
            if(email== ''){
               $('#email').next().show();
               return false;
            }
            if(IsEmail(email)==false){
                $('#invalid_email').show();
                return false;
            }

            if(phone== ''){
                $('#phone').next().show();
                return false;
            }
            if(message== ''){
                $('#message').next().show();
                return false;
            }
            //ajax call php page
            $.post("send.php", $("#contactform").serialize(),  function(response) {
            $('#contactform').fadeOut('slow',function(){
                $('#success').html(response);
                $('#success').fadeIn('slow');
               });
             });
             return false;
          });
      });
      function IsEmail(email) {
        var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        if(!regex.test(email)) {
           return false;
        }else{
           return true;
        }
      }
  </script>

<form action="" method="post" id="contactform">
                            <table class="contact-table">
                              <tr>
                                <td><label for="name">Name :</label></td>
                                <td class="name"> <input name="name" id="name" type="text" placeholder="Please enter your name" class="contact-input"><span class="form_error">Please enter your name</span></td>
                              </tr>
                              <tr>
                                <td><label for="email">Email :</label></td>
                                <td class="email"><input name="email" id="email" type="text" placeholder="Please enter your email" class="contact-input"><span class="form_error">Please enter your email</span>
                                  <span class="form_error" id="invalid_email">This email is not valid</span></td>
                              </tr>
                              <tr>
                                <td><label for="phone">Phone :</label></td>
                                <td class="phone"><input name="phone" id="phone" type="text" placeholder="Please enter your phone" class="contact-input"><span class="form_error">Please enter your phone</span></td>
                              </tr>
                              <tr>
                                <td><label for="message">Message :</label></td>
                                <td class="message"><textarea name="message" id="message" class="contact-input"></textarea><span class="form_error">Please enter your message</span></td>
                              </tr>
                              <tr>
                                <td></td>
                                <td>
                                  <input type="submit" class="contactform-buttons" id="submit"value="Send" />
                                  <input type="reset" class="contactform-buttons" id="" value="Clear" />
                                </td>
                              </tr>
                            </table>
     </form>
     <div id="success" style="color:red;"></div>

15

<!-- Dont forget to include the jQuery library here -->
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">

$(document).ready(function() {

    $("#validate").keyup(function(){

        var email = $("#validate").val();

        if(email != 0)
        {
            if(isValidEmailAddress(email))
            {
                $("#validEmail").css({
                    "background-image": "url('validYes.png')"
                });
            } else {
                $("#validEmail").css({
                    "background-image": "url('validNo.png')"
                });
            }
        } else {
            $("#validEmail").css({
                "background-image": "none"
            });         
        }

    });

});

function isValidEmailAddress(emailAddress) {
    var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
    return pattern.test(emailAddress);
}

</script>

<style>
    #validEmail
    {
        margin-top: 4px;
        margin-left: 9px;
        position: absolute;
        width: 16px;
        height: 16px;
    }

    .text
    {
        font-family: Arial, Tahoma, Helvetica;
    }
</style>

    <title>Live Email Validation with jQuery Demo</title>
</head>
<body>
    <div class="text"><h1>Reynoldsftw.com - Live Email Validation</h1><h2>Type in an email address in the box below:</h2></div>
    <div><input type="text" id="validate" width="30"><span id="validEmail"></span></div>
    <div class="text"><P>More script and css style

: www.htmldrive.net


Nguồn: htmldrive.com


14

Tôi muốn giới thiệu Verimail.js , nó cũng có một plugin JQuery .

Tại sao? Verimail hỗ trợ như sau:

  • Xác thực cú pháp (theo RFC 822)
  • Xác nhận IANA TLD
  • 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

Vì vậy, bên cạnh xác nhận, Verimail.js cũng cung cấp cho bạn các đề xuất. Vì vậy, nếu bạn nhập một email có TLD sai hoặc tên miền rất giống với một tên miền email phổ biến (hotmail.com, gmail.com, v.v.), nó có thể phát hiện điều này và đề nghị sửa.

Ví dụ:

  • test@gnail.con -> Ý của bạn là test @ gmail.com ?
  • test@hey.nwt -> Ý bạn là test @ hey. mạng ?
  • test@hottmail.com -> Ý của bạn là test @ hotmail.com ?

Và như thế..

Để sử dụng nó với jQuery, chỉ cần bao gồm verimail.jquery.js trên trang web của bạn và chạy chức năng bên dưới:

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

Phần tử thông báo là một phần tử trong đó một thông báo sẽ được hiển thị. Đây có thể là tất cả mọi thứ từ "Email của bạn không hợp lệ" đến "Ý của bạn là ...?".

Nếu bạn có một biểu mẫu và muốn hạn chế nó để không thể gửi nó trừ khi email hợp lệ, thì bạn có thể kiểm tra trạng thái bằng hàm getVerimailStatus như dưới đây:

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

Hàm này trả về mã trạng thái số nguyên theo đối tượng Comfirm.AlphaMail.Verimail.Status. Nhưng quy tắc chung là bất kỳ mã nào dưới 0 là mã chỉ ra lỗi.


.getVerimailStatus()không trả về mã trạng thái số, chỉ là giá trị chuỗi của success,error hoặc có thể pending(không xác minh người cuối cùng).
Niko Nyman

14

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 (email is invalid) */ }

điều này được cung cấp bởi người dùng Luca Filosofi trong câu trả lời này


Nếu bạn sử dụng điều này trong trang ASP.NET MVC Razor, đừng quên thoát @ký tự với một @ký tự khác . Như vậy @@, nếu không bạn sẽ nhận được lỗi xây dựng.
Rosdi Kasim

11

Một giải pháp rất đơn giản là sử dụng xác nhận html5:

<form>
  <input type="email" required pattern="[^@]+@[^@]+\.[a-zA-Z]{2,6}">

  <input type="submit">
</form>

http://jsfiddle.net/du676/56/


10

Điều này thực hiện xác nhận kỹ lưỡng hơn, ví dụ: nó kiểm tra các dấu chấm liên tiếp trong tên người dùng như john..doe @ example.com

function isValidEmail(email)
{
    return /^[a-z0-9]+([-._][a-z0-9]+)*@([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,4}$/.test(email)
        && /^(?=.{1,64}@.{4,64}$)(?=.{6,100}$).*/.test(email);
}

Xem địa chỉ email xác thực bằng biểu thức chính quy trong JavaScript .


1
Nhưng các chấm liên tiếp có thực sự không hợp lệ? Ngược lại, tôi nghĩ rằng bạn sẽ loại trừ các địa chỉ email hợp lệ bằng cách làm điều đó.
icktoofay

9

Như những người khác đã đề cập, bạn có thể sử dụng biểu thức chính quy để kiểm tra xem địa chỉ email có khớp với mẫu không. Nhưng bạn vẫn có thể có email phù hợp với mẫu nhưng tôi vẫn bị trả lại hoặc là email spam giả.

kiểm tra với một regex

var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
return regex.test(email);

kiểm tra với API xác thực email thực

Bạn có thể sử dụng API để kiểm tra xem địa chỉ email có thật không và hiện đang hoạt động.

var emailAddress = "foo@bar.com"
response = $.get("https://isitarealemail.com/api/email/validate?email=" +
    emailAddress,
    function responseHandler(data) {
        if (data.status === 'valid') {
            // the email is valid and the mail box is active
        } else {
            // the email is incorrect or unable to be tested.
        }
    })

Để biết thêm xem https://isitarealemail.com hoặc bài đăng trên blog


8

Nếu bạn có một hình thức cơ bản, chỉ cần tạo loại đầu vào của email: <input type="email" required>

Điều này sẽ hoạt động cho các trình duyệt sử dụng các thuộc tính HTML5 và sau đó bạn thậm chí không cần JS. Chỉ sử dụng xác thực email ngay cả với một số tập lệnh ở trên sẽ không làm được gì nhiều vì:

some@email.com so@em.co my@fakemail.net

vv ... Tất cả sẽ xác nhận là email "thực". Vì vậy, bạn nên đảm bảo rằng người dùng phải nhập địa chỉ email của họ hai lần để đảm bảo rằng họ đặt cùng một địa chỉ. Nhưng để đảm bảo rằng địa chỉ email là thật sẽ rất khó nhưng rất thú vị để xem liệu có đường. Nhưng nếu bạn chỉ chắc chắn rằng đó là một email, hãy bám vào đầu vào HTML5.

VÍ DỤ FIDDLE

Điều này hoạt động trong FireFox và Chrome. Nó có thể không hoạt động trong Internet Explorer ... Nhưng internet explorer tệ. Vậy thì ...


Phương thức regrec thường ngăn chặn các email ngớ ngẩn rõ ràng như @ bc (mà ví dụ về JSFiddle được liên kết của bạn cho phép sử dụng Chrome mới nhất), vì vậy giải pháp HTML5 rõ ràng là một giải pháp không đầy đủ.
SnowInferno

mát mẻ. Vậy làm thế nào về việc chỉ sử dụng khớp mẫu như HTML5 là "phải" để làm gì? Tại sao bạn không thử điều này trong chromebook của mình: jsfiddle.net/du676/8
isaac

8

Xác thực email Javascript trong MVC / ASP.NET

Vấn đề tôi gặp phải trong khi sử dụng câu trả lời của Fabian, là triển khai nó trong chế độ xem MVC vì @biểu tượng Dao cạo . Bạn phải bao gồm một @biểu tượng bổ sung để thoát khỏi nó, như vậy:@@

Để tránh dao cạo trong MVC

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}

Tôi đã không nhìn thấy nó ở nơi khác trên trang này, vì vậy tôi nghĩ rằng nó có thể hữu ích.

BIÊN TẬP

Đây là một liên kết từ Microsoft mô tả việc sử dụng nó.
Tôi vừa kiểm tra mã ở trên và nhận được js sau:

function validateEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 
  return regex.test(email);
}

Đó là làm chính xác những gì nó phải làm.


@nbrogi Ý bạn là gì khi nó không hoạt động? Tôi chỉ kiểm tra lại lần nữa và điều này tạo ra các js sau var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; Điều gì đang xảy ra với mã của bạn?
Trevor Nestman

Xin lỗi, tôi không chắc chắn vào lúc này, tôi đã thay đổi hoàn toàn.
nkkollaw

Xin vui lòng cho tôi biết khi bạn có thể. Nếu đây là thông tin xấu, thì tôi sẽ gỡ nó xuống. Tôi cố gắng đóng góp thông tin hữu ích khi có thể và điều này đã giúp tôi khi viết regex trong chế độ xem MVC.
Trevor Nestman

Một lần nữa, tôi muốn biết lý do tại sao điều này đã bị hạ cấp. Nó thực hiện chính xác những gì tôi muốn nó tạo ra @biểu tượng trong một biểu thức chính thức .cshtml. Thông thường nó sẽ cố gắng coi mọi thứ sau @biểu tượng là mã dao cạo, nhưng gấp đôi @@ngăn chặn điều đó.
Trevor Nestman

vấn đề chính tôi thấy là trong bộ mã thứ hai, biểu thức chính của bạn được đặt thành một biến có tên regex, nhưng dòng thứ hai sử dụng một biến có tên là re
phlare

7
function isValidEmail(emailText) {
    var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\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]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([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(emailText);
};

Sử dụng như thế này:

if( !isValidEmail(myEmail) ) { /* do things if myEmail is valid. */ }

6
function validateEmail(emailaddress){  
   var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;  
   if(!emailReg.test(emailaddress)) {  
        alert("Please enter valid email id");
   }       
}

5
<script type = "text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type = "text/javascript">
    function ValidateEmail(email) {
        var expr = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
        return expr.test(email);
    };
    $("#btnValidate").live("click", function () {
        if (!ValidateEmail($("#txtEmail").val())) {
            alert("Invalid email address.");
        }
        else {
            alert("Valid email address.");
        }
    });
</script>
<input type = "text" id = "txtEmail" />
<input type = "button" id = "btnValidate" value = "Validate" />

4

Hạ cánh tại đây ..... đã kết thúc tại đây: https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address

... cung cấp regex sau:

/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/

... mà tôi đã tìm thấy nhờ một ghi chú về plugin Xác thực jQuery readme: https://github.com/jzaefferer/jquery-validation/blob/master/README.md#reporting-an-su

Vì vậy, phiên bản cập nhật của @Fabian 's câu trả lời sẽ là:

function IsEmail(email) {
  var regex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
  return regex.test(email);
}

Mong rằng sẽ giúp


Đây là câu trả lời tốt nhất cho tôi - nó đã trở thành sự thật john..doe@example.comnhưng muốn điều đó là sai
Hiệp sĩ Adam

3

dùng cái này

if ($this.hasClass('tb-email')) {
    var email = $this.val();
    var txt = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (!txt.test(email)) {
        e.preventDefault();
        $this.addClass('error');
    } else {
        $this.removeClass('error');
    }
}

3

Lỗi nằm trong Plugin xác thực Jquery Chỉ xác thực với @ để thay đổi điều này

thay đổi mã này

email: function( value, element ) {
    // From http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#e-mail-state-%28type=email%29
    // Retrieved 2014-01-14
    // If you have a problem with this implementation, report a bug against the above spec
    // Or use custom methods to implement your own email validation
    return this.optional( element ) || /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test( value );
}

3

Đối với những người muốn sử dụng một giải pháp duy trì tốt hơn so với các trận đấu RegEx dài ánh sáng gây rối, tôi đã viết lên một vài dòng mã. Thoose ai muốn lưu byte, hãy gắn bó với biến thể RegEx :)

Điều này hạn chế:

  • Không có @ trong chuỗi
  • Không có dấu chấm trong chuỗi
  • Nhiều hơn 2 chấm sau @
  • Ký tự xấu trong tên người dùng (trước @)
  • Hơn 2 @ trong chuỗi
  • Ký tự xấu trong miền
  • Ký tự xấu trong tên miền phụ
  • Ký tự xấu trong TLD
  • TLD - địa chỉ

Dù sao, vẫn có thể rò rỉ qua, vì vậy hãy chắc chắn rằng bạn kết hợp điều này với xác thực phía máy chủ + xác minh liên kết email.

Đây là JSFiddle

 //validate email

var emailInput = $("#email").val(),
    emailParts = emailInput.split('@'),
    text = 'Enter a valid e-mail address!';

//at least one @, catches error
if (emailParts[1] == null || emailParts[1] == "" || emailParts[1] == undefined) { 

    yourErrorFunc(text);

} else {

    //split domain, subdomain and tld if existent
    var emailDomainParts = emailParts[1].split('.');

    //at least one . (dot), catches error
    if (emailDomainParts[1] == null || emailDomainParts[1] == "" || emailDomainParts[1] == undefined) { 

        yourErrorFunc(text); 

     } else {

        //more than 2 . (dots) in emailParts[1]
        if (!emailDomainParts[3] == null || !emailDomainParts[3] == "" || !emailDomainParts[3] == undefined) { 

            yourErrorFunc(text); 

        } else {

            //email user
            if (/[^a-z0-9!#$%&'*+-/=?^_`{|}~]/i.test(emailParts[0])) {

               yourErrorFunc(text);

            } else {

                //double @
                if (!emailParts[2] == null || !emailParts[2] == "" || !emailParts[2] == undefined) { 

                        yourErrorFunc(text); 

                } else {

                     //domain
                     if (/[^a-z0-9-]/i.test(emailDomainParts[0])) {

                         yourErrorFunc(text); 

                     } else {

                         //check for subdomain
                         if (emailDomainParts[2] == null || emailDomainParts[2] == "" || emailDomainParts[2] == undefined) { 

                             //TLD
                             if (/[^a-z]/i.test(emailDomainParts[1])) {

                                 yourErrorFunc(text);

                              } else {

                                 yourPassedFunc(); 

                              }

                        } else {

                             //subdomain
                             if (/[^a-z0-9-]/i.test(emailDomainParts[1])) {

                                 yourErrorFunc(text); 

                             } else {

                                  //TLD
                                  if (/[^a-z]/i.test(emailDomainParts[2])) {

                                      yourErrorFunc(text); 

                                  } else {

                                      yourPassedFunc();
}}}}}}}}}

3

Bạn có thể sử dụng Xác thực jQuery và, trong một dòng HTML duy nhất, bạn có thể xác thực email và thông báo xác thực email:type="email" required data-msg-email="Enter a valid email account!"

Bạn có thể sử dụng dữ liệu-tin nhắn-email để đặt tin nhắn được cá nhân hóa hoặc nếu không không đặt tham số này và thông báo mặc định sẽ được hiển thị: "Vui lòng nhập địa chỉ email hợp lệ."

Ví dụ đầy đủ:

<form class="cmxform" id="commentForm" method="get" action="">
  <fieldset>
    <p>
      <label for="cemail">E-Mail (required)</label>
      <input id="cemail" type="email" name="email" required data-msg-email="Enter a valid email account!">
    </p>
    <p>
      <input class="submit" type="submit" value="Submit">
    </p>
  </fieldset>
</form>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/jquery-validation@1.17.0/dist/jquery.validate.js"></script>
<script>
$("#commentForm").validate();
</script>

2
if($("input#email-address").getVerimailStatus() < 0) { 

(incorrect code)

}

if($("input#email-address").getVerimailStatus() == 'error') { 

(right code)

}

9
Bạn có thể giải thích câu trả lời của mình không ... ví dụ bạn nên đề cập rằng getVerimailStatus là một plugin bổ sung.
Dave Hogan

2
checkRegexp( email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\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]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([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, "eg. ui@jquery.com" );

Giới thiệu: TRANG WEB UI JQUERY


2

bạn sẽ thấy điều này: jquery.validate.js , thêm nó vào dự án của bạn

sử dụng nó như thế này:

<input id='email' name='email' class='required email'/>

2

Một lựa chọn đơn giản và đầy đủ khác:

<input type="text" id="Email"/>
<div id="ClasSpan"></div>   
<input id="ValidMail" type="submit"  value="Valid"/>  


function IsEmail(email) {
    var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    return regex.test(email);
}

$("#ValidMail").click(function () {
    $('span', '#ClasSpan').empty().remove();
    if (IsEmail($("#Email").val())) {
        //aqui mi sentencia        
    }
    else {
        $('#ClasSpan').append('<span>Please enter a valid email</span>');
        $('#Email').keypress(function () {
            $('span', '#itemspan').empty().remove();
        });
    }
});

3
Stack Overflow là một trang web bằng tiếng Anh. Xin vui lòng không đăng nội dung trong các ngôn ngữ khác.
Anders

2

Bạn có thể tạo chức năng của riêng bạn

function emailValidate(email){
    var check = "" + email;
    if((check.search('@')>=0)&&(check.search(/\./)>=0))
        if(check.search('@')<check.split('@')[1].search(/\./)+check.search('@')) return true;
        else return false;
    else return false;
}

alert(emailValidate('your.email@yahoo.com'));

1

Một cái đơn giản hóa tôi vừa làm, làm những gì tôi cần nó. Đã giới hạn nó chỉ là chữ và số, dấu chấm, gạch dưới và @.

<input onKeyUp="testEmailChars(this);"><span id="a"></span>
function testEmailChars(el){
    var email = $(el).val();
    if ( /^[a-zA-Z0-9_@.-]+$/.test(email)==true ){
        $("#a").html("valid");
    } else {
        $("#a").html("not valid");
    }
}

Được thực hiện với sự giúp đỡ từ người khác


1

Regrec này ngăn chặn các tên miền trùng lặp như abc@abc.com.com.com.com, nó sẽ chỉ cho phép tên miền hai lần như abc@abc.co.in. Nó cũng không cho phép thống kê từ số như 123abc@abc.com

 regexp: /^([a-zA-Z])+([a-zA-Z0-9_.+-])+\@(([a-zA-Z])+\.+?(com|co|in|org|net|edu|info|gov|vekomy))\.?(com|co|in|org|net|edu|info|gov)?$/, 

Tất cả tốt nhất !!!!!


1

Xác thực email trong khi gõ, với xử lý trạng thái nút.

$("#email").on("input", function(){
    var email = $("#email").val();
    var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
    if (!filter.test(email)) {
      $(".invalid-email:empty").append("Invalid Email Address");
      $("#submit").attr("disabled", true);
    } else {
      $("#submit").attr("disabled", false);
      $(".invalid-email").empty();
    }
  });

1

nếu bạn đang sử dụng xác nhận jquery

Tôi đã tạo một phương thức emailCustomFormatđược sử dụng regexcho định dạng lưu ký của tôi, bạn có thể thay đổi nó để đáp ứng yêu cầu của bạn

jQuery.validator.addMethod("emailCustomFormat", function (value, element) {
        return this.optional(element) || /^([\w-\.]+@@([\w-]+\.)+[\w-]{2,4})?$/.test(value);
    }, abp.localization.localize("FormValidationMessageEmail"));// localized message based on current language

sau đó bạn có thể sử dụng nó như thế này

$("#myform").validate({
  rules: {
    field: {
      required: true,
      emailCustomFormat : true
    }
  }
});

regex này chấp nhận

abc@abc.abc, abc@abc.abcd nhưng không phải cái này

abc@abc, abc@abc.a,abc@abc.abcde

hy vọng điều này sẽ giúp bạn

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.