如何使用 JQuery 来验证电子邮件地址?

How can one use JQuery to validate email addresses?

提问人:DuH 提问时间:3/24/2010 最后编辑:starballDuH 更新时间:12/29/2022 访问量:1052709

问:

如何使用 JQuery 来验证电子邮件地址?

jQuery 验证 电子邮件

评论

0赞 Mikko Rantalainen 5/29/2018
在尝试“验证”电子邮件地址之前,您应该阅读以下内容:hackernoon.com/...

答:

799赞 Fabian 3/24/2010 #1

你可以使用常规的旧 javascript 来做到这一点:

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

评论

69赞 Fabian 3/24/2010
是的,请记住,jQuery仍然是javascript:)
37赞 Arseny 10/29/2012
尽管这个正则表达式认为大多数现实世界的地址都是有效的,但它仍然有很多误报和漏报。例如,请参阅维基百科上有效和无效电子邮件地址的示例
11赞 Liath 9/5/2014
随着新的顶级域名变得越来越普遍,这个正则表达式可能需要修改:.systems 和 .poker 等现在都是有效的 TLD,但无法通过正则表达式检查
5赞 Ira Herman 7/12/2018
根据 Theo 对另一个答案的评论,您应该更改为支持较新的 TLD,例如 .museum 等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})+$/;
4赞 DrCJones 9/20/2019
要及时了解适用于电子邮件地址的 regx,您可以查看 emailregex.com 。目前是/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
45赞 Andrew Bashtannik 3/24/2010 #2

查看 http://bassistance.de/jquery-plugins/jquery-plugin-validation/。这是一个很好的jQuery插件,它允许为表单构建强大的验证系统。 这里有一些有用的示例。因此,表单中的电子邮件字段验证将如下所示:

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

有关详细信息和示例,请参阅电子邮件方法文档

评论

1赞 Andrew Bashtannik 4/14/2014
最后一个还活着)
8赞 Basheer AL-MOMANI 11/24/2016
但接受的格式是(这很奇怪)它必须如何解决这个问题?x@x[email protected]
2赞 Bill Gillingham 12/23/2016
@BasheerAL-MOMANI [jqueryvalidation.org/jQuery.validator.methods/] $.validator.methods.email = function( value, element ) { return this.optional( element ) || //^.+@.+\..+$/.test( value ); }
42赞 Nick Craver 3/24/2010 #3

出于几个原因,我会使用 jQuery 验证插件

你验证了,好吧,太好了,现在怎么办?您需要显示错误,在有效时处理擦除它,显示总共有多少错误?它可以为您处理很多事情,无需重新发明轮子。

此外,另一个巨大的好处是它托管在 CDN 上,可以在此处找到此答案时的当前版本: http://www.asp.net/ajaxLibrary/CDNjQueryValidate16.ashx 这意味着客户端的加载时间更快。

评论

7赞 kraftb 2/25/2014
还行。。。无需重新发明轮子。但是,为什么我必须安装数十KByte的Javascript来验证字段。这就像建造一家汽车工厂,如果你只需要一个新的轮:)
3赞 Nick Craver 2/26/2014
@kraftb 正如我在回答中所说,这是围绕验证的处理和显示,而不仅仅是验证文本本身。
6赞 jfgrissom 7/31/2014
感谢您的@NickCraver:这看起来确实是处理电子邮件验证问题的“最佳实践”方法。这肯定不像建造一个工厂(编写库来完成所有工作)来获得轮子。这就像按照工厂的说明在现代车辆上安装车轮(将汽车顶起,放置车轮 - 装上凸耳螺母),而不是试图弄清楚如何在您的汽车上安装马车车轮。这个插件使用起来超级简单。要进行表单验证,它实际上是一个包含、一些注释和单个方法调用。
4赞 Dom Vinyard 8/10/2015
现在你正在重新发明“重新发明轮子”的比喻!
0赞 Jerreck 1/29/2016
对于被困在 Web 表单应用程序上工作的人 encosia.com/using-jquery-validation-with-asp-net-webforms
6赞 JAB 11/4/2011 #4
function validateEmail(emailaddress){  
   var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;  
   if(!emailReg.test(emailaddress)) {  
        alert("Please enter valid email id");
   }       
}
188赞 Manish Shrivastava 1/31/2012 #5

用于验证电子邮件的jQuery函数

我真的不喜欢使用插件,尤其是当我的表单只有一个需要验证的字段时。我使用这个函数,并在需要验证电子邮件表单字段时调用它。

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

现在要用这个

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

评论

16赞 nffdiogosilva 11/13/2013
你应该回来emailReg.test($email);
7赞 Diziet 1/10/2014
仅供参考,对于空白电子邮件地址,这将返回 true。例如: .我只是将函数简化为 emailReg var 的声明,然后是这样的:emailReg.text("")truereturn ( $email.length > 0 && emailReg.test($email))
15赞 Theo 2/21/2014
用于检查电子邮件地址有效性的正则表达式已经过时,因为我们现在有 6 个字符的域名扩展名,例如 .museum,因此您需要更改为var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,6})?$/;
3赞 iGanja 4/5/2014
没错,你是@h.coates!我来到这个线程,希望发现jQuery实际上有一个内置的电子邮件验证。继续前进,这些不是你要找的机器人......
3赞 Jeroenv3 6/24/2015
@Theo的观点至关重要,但 TLD 的实际长度应大于 6 个字符,扩展的理论上限为 63 个字符。目前最长的一个是 20 多 见 data.iana.org/TLD/tlds-alpha-by-domain.txt
14赞 Robin Orheden 10/6/2012 #6

我会推荐Verimail.js,它也有一个JQuery插件

为什么?Verimail 支持以下功能:

  • 语法验证(根据 RFC 822)
  • IANA TLD 验证
  • 最常见的 TLD 和电子邮件域的拼写建议
  • 拒绝临时电子邮件帐户域,例如 mailinator.com

因此,除了验证之外,Verimail.js还为您提供建议。因此,如果您输入的电子邮件具有错误的 TLD 或域名,而该域名与常见的电子邮件域名(hotmail.com、gmail.com 等)非常相似,它可以检测到这一点并提出更正建议。

例子:

等等。

要将其与jQuery一起使用,只需在您的站点上包含verimail.jquery,.js并运行以下函数:

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

message 元素是将在其中显示消息的元素。这可以是从“您的电子邮件无效”到“您的意思是......?”的所有内容。

如果您有一个表单并希望对其进行限制,使其无法提交,除非电子邮件有效,那么您可以使用 getVerimailStatus-function 检查状态,如下所示:

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

此函数根据对象 Comfirm.AlphaMail.Verimail.Status 返回整数状态代码。但一般的经验法则是,任何低于 0 的代码都是表示错误的代码。

评论

0赞 Niko Nyman 4/21/2014
.getVerimailStatus()不返回数字状态代码,只返回字符串值 ,或者可能(未验证最后一个)。successerrorpending
2赞 Lorenzo 10/27/2012 #7
if($("input#email-address").getVerimailStatus() < 0) { 

(incorrect code)

}

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

(right code)

}

评论

11赞 Dave Hogan 10/27/2012
你能详细说明你的答案吗?例如,您应该提到 getVerimailStatus 是一个附加插件。
18赞 user1993920 1/31/2013 #8
<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>
2赞 Develop4Life 6/20/2013 #9
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. [email protected]" );

参考资料 : JQUERY UI 网站

16赞 SwatiKothari 9/4/2013 #10

<!-- 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


来源:htmldrive.com

10赞 Geek 10/12/2013 #11

这将执行更彻底的验证,例如,它会检查用户名中的连续点,例如 [email protected]

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

请参阅在 JavaScript 中使用正则表达式验证电子邮件地址

评论

1赞 icktoofay 11/3/2014
但是连续的点真的无效吗?相反,我认为这样做会排除有效的电子邮件地址。
7赞 JayKandari 11/7/2013 #12
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);
};

像这样使用:

if( !isValidEmail(myEmail) ) { /* do things if myEmail is valid. */ }
3赞 Ankit Agrawal 2/14/2014 #13

使用这个

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');
    }
}
8赞 isaac weathers 3/4/2014 #14

如果您有基本表格,只需输入电子邮件类型即可:<input type="email" required>

这适用于使用 HTML5 属性的浏览器,然后您甚至不需要 JS。即使使用上面的一些脚本,仅使用电子邮件验证也不会有太大作用,因为:

[电子邮件保护] [电子邮件保护] [电子邮件保护]

等。。。将全部验证为“真实”电子邮件。因此,您最好确保用户必须输入他们的电子邮件地址两次,以确保他们输入相同的电子邮件地址。但是要保证电子邮件地址是真实的,这将是非常困难的,但非常有趣,看看是否有办法。但是,如果您只是确保它是一封电子邮件,请坚持使用 HTML5 输入。

小提琴示例

这适用于 FireFox 和 Chrome。它可能在 Internet Explorer 中不起作用...但是 Internet Explorer 很烂。所以还有那个......

评论

0赞 SnowInferno 9/24/2014
regexp 方法通常可以防止像 [email protected] 这样的明显愚蠢的电子邮件(您的链接的 JSFiddle 示例允许使用最新的 Chrome),因此 HTML5 解决方案显然是一个不适当的解决方案。
0赞 isaac weathers 9/26/2014
凉。那么,像 HTML5 那样使用模式匹配是“应该”做的呢?你为什么不在你的chromebook中试试这个:jsfiddle.net/du676/8
5赞 Pritam 12/2/2014 #15
<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" />
5赞 timborden 1/7/2015 #16

降落在这里.....最后来到这里:https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address

...它提供了以下正则表达式:

/^[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])?)*$/

...多亏了jQuery验证插件自述文件上的注释,我找到了它:https://github.com/jzaefferer/jquery-validation/blob/master/README.md#reporting-an-issue

因此,@Fabian答案的更新版本将是:

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

希望能有所帮助

评论

0赞 Adam Knights 7/22/2015
这对我来说是最好的答案 - 它返回了 true,但希望那是错误的[email protected]
2赞 Chuanshi Liu 3/24/2015 #17

你应该看到这个:jQuery.Validate.js,把它添加到你的项目中

像这样使用它:

<input id='email' name='email' class='required email'/>
3赞 user4974898 6/5/2015 #18

Bug 在 Jquery Validation Validation Plugin 中,仅使用 @ 进行验证以更改此错误

将代码更改为此

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 );
}
1赞 nathan 7/20/2015 #19

我刚刚制作的简化版,可以满足我的需要。 将其限制为字母数字、句点、下划线和 @。

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

在他人的帮助下制作

2赞 jorcado 9/30/2015 #20

另一个简单而完整的选项:

<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赞 Anders 9/30/2015
Stack Overflow 是一个英文网站。请不要发布其他语言的内容。
0赞 mickmackusa 11/25/2020
这个答案缺少其教育解释。
1赞 Brijeshkumar 11/3/2015 #21

这个正则表达式可以防止重复的域名,如 [email protected],它只允许域名两次,如 [email protected]。它也不允许从像 [email protected] 这样的数字中统计

 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)?$/, 

所有最好的!!!!

3赞 SEsterbauer 3/18/2016 #22

对于那些想要使用比破坏性的光年长正则表达式匹配更好的可维护解决方案的人,我写了几行代码。想要节省字节的人,请坚持使用正则表达式变体:)

这限制了:

  • 字符串中没有 @
  • 字符串中没有点
  • 超过 2 个点后@
  • 用户名中的字符错误(@ 之前)
  • 字符串中超过 2 个 @
  • 域中的错误字符
  • 子域中的字符错误
  • TLD 中的字符错误
  • TLD - 地址

无论如何,它仍然有可能泄漏,因此请确保将其与服务器端验证 + 电子邮件链接验证相结合。

这是 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();
}}}}}}}}}
1赞 Radovan Skendzic 8/4/2016 #23

在键入时验证电子邮件,并具有按钮状态处理功能。

$("#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();
    }
  });
16赞 Amila kumara 12/9/2016 #24

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

这是由用户 Luca Filosofi 在此答案中提供的 这个答案

评论

2赞 Rosdi Kasim 6/14/2017
如果在 MVC Razor 页面 ASP.NET 使用它,请不要忘记使用另一个字符转义该字符。像这样,否则你会得到构建错误。@@@@
17赞 Trevor Nestman 12/29/2016 #25

MVC/ASP.NET 中的 Javascript 电子邮件验证

我在使用 Fabian 的答案时遇到的问题是,由于 Razor 符号,我在 MVC 视图中实现了它。您必须包含一个额外的符号才能对其进行转义,如下所示:@@@@

避免 MVC 中的 Razor

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

我在此页面的其他地方没有看到它,所以我认为它可能会有所帮助。

编辑

这是来自Microsoft的链接,描述了它的用法。
我刚刚测试了上面的代码并得到了以下js:

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

这完全是它应该做的事情。

评论

0赞 Trevor Nestman 2/6/2017
@nbrogi 你什么意思这行不通?我刚刚再次检查了这个,这产生了以下js:你的代码发生了什么?var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
0赞 nkkollaw 2/7/2017
对不起,我目前不确定,我完全改变了它。
0赞 Trevor Nestman 2/7/2017
请尽可能告诉我。如果这是不好的信息,那么我会把它拿下来。在可能的情况下,我尝试提供有用的信息,这在 MVC 视图中编写正则表达式时很有帮助。
0赞 Trevor Nestman 2/7/2017
同样,我想知道为什么这被否决了。它完全符合我的意愿,即在 .通常,它会尝试将符号后面的所有内容都视为剃须刀代码,但双精度阻止了这一点。@.cshtml@@@
0赞 phlare 8/9/2018
我看到的主要问题是在第二个代码块中,您的正则表达式设置为名为正则表达式的变量,但第二行使用名为 re 的变量
11赞 iamse7en 9/18/2017 #26

一个非常简单的解决方案是使用 html5 验证:

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

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

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

3赞 J.C. Gras 11/14/2017 #27

您可以使用 jQuery 验证,并且在单个 HTML 行中可以验证电子邮件和电子邮件验证消息:type="email" required data-msg-email="Enter a valid email account!"

您可以使用 data-msg-email 参数放置个性化消息,或者不放置此参数,将显示默认消息:“请输入有效的电子邮件地址。

完整示例:

<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/[email protected]/dist/jquery.validate.js"></script>
<script>
$("#commentForm").validate();
</script>
3赞 Wahid Masud 3/16/2018 #28

您可以创建自己的函数

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('[email protected]'));
4赞 JoelBonetR 5/29/2018 #29

这个问题比乍一看更难回答。如果您想正确处理电子邮件。

世界各地有很多人在寻找“统治所有人的正则表达式”,但事实是,电子邮件提供商的语气各不相同。

怎么了?好吧,“a_z%@gmail.com 不可能存在,但它可能通过另一个提供商存在这样的地址”[email protected]。

为什么? 根据 RFC:https://en.wikipedia.org/wiki/Email_address#RFC_specification

我将摘录一段内容来促进讲座:

电子邮件地址的本地部分可以使用以下任何 ASCII 字符:

  • 大写和小写拉丁字母 A 到 Z 和 a 到 z;
  • 数字 0 到 9;
  • 特殊字符 !#$%&'*+-/=?^_'{|}~;
  • dot .,前提是除非引用,否则它不是第一个或最后一个字符,并且除非引用,否则它不会连续出现(例如,不允许使用[email protected],但“John..允许 Doe“@example.com);[6] 请注意,某些邮件服务器通配符本地部分,通常是加号后面的字符,而减号后面的字符较少,因此 fred+bah@domain 和 fred+foo@domain 可能最终与 fred+@domain 甚至 fred@domain 放在同一个收件箱中。这对于标记电子邮件进行排序(见下文)和垃圾邮件控制非常有用。大括号 { 和 } 也以这种方式使用,但频率较低。
  • 空格和“(),:;<>@[] 字符是有限制的(它们只允许在带引号的字符串内,如下文所述,此外,反斜杠或双引号前面必须有反斜杠);
  • 允许在本地部分的两端使用括号进行注释;例如,john.smith(comment)@example.com 和 (comment)John。[email protected] 都等同于 [email protected]。

所以,我可以拥有这样的电子邮件地址:

A__z/J0hn.sm{it!}[email protected]

如果你尝试这个地址,我敢打赌它会在全网上发布的所有或大部分正则表达式中失败。但请记住,此地址遵循 RFC 规则,因此它是公平的。

想象一下,我无法在任何地方注册与这些正则表达式检查的挫败感!

唯一真正可以验证电子邮件地址的人是电子邮件地址的提供者。

那么,该如何应对呢?

在几乎所有情况下,用户是否添加无效的电子邮件都无关紧要。您可以依赖在 RFC 附近运行的 HTML 5 input type=“email”,失败的可能性很小。 HTML5 输入类型=“电子邮件” 信息:https://www.w3.org/TR/2012/WD-html-markup-20121011/input.email.html

例如,这是一封有效的 RFC 电子邮件:

"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com

但是 html5 验证会告诉你,@ 之前的文本不能包含 “ 或 () 字符,这实际上是不正确的。

无论如何,您应该通过接受电子邮件地址并向该电子邮件地址发送电子邮件来做到这一点,其中包含用户必须访问的代码/链接以确认有效性。

执行此操作时,一个好的做法是“再次输入您的电子邮件”,以避免用户键入错误。如果这对你来说还不够,请添加一个预提交模式窗口,标题为“这是您当前的电子邮件吗?”,然后是用户在 h2 标签中输入的邮件,你知道,以清楚地显示他们输入的电子邮件,然后添加一个“是,提交”按钮。

12赞 Stephen 6/17/2019 #30

正如其他人所提到的,您可以使用正则表达式来检查电子邮件地址是否与模式匹配。但是您仍然可以拥有与该模式相匹配的电子邮件,但我仍然会退回或是虚假的垃圾邮件。

使用正则表达式进行检查

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

使用真实的电子邮件验证 API 进行检查

您可以使用 API 来检查电子邮件地址是否真实且当前处于活动状态。

var emailAddress = "[email protected]"
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.
        }
    })

有关详细信息,请参阅 https://isitarealemail.com博客文章