【问题标题】:Email validation using jQuery使用 jQuery 进行电子邮件验证
【发布时间】:2011-01-31 05:04:21
【问题描述】:

我是 jQuery 新手,想知道如何使用它来验证电子邮件地址。

【问题讨论】:

  • 在尝试“验证”电子邮件地址之前,您应该阅读以下内容:hackernoon.com/…

标签: jquery validation email


【解决方案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);
}

【讨论】:

  • 是的,记住 jQuery 仍然是 javascript :)
  • 即使这个正则表达式认为大多数现实世界的地址都是有效的,它仍然有很多误报和漏报。例如,参见维基百科上的examples of valid and invalid email addresses
  • 随着新的顶级域变得越来越普遍,此正则表达式可能需要修改 .systems 和 .poker 等现在都是有效的 TLD,但将无法通过正则表达式检查
  • Per Theo 对另一个答案的评论,您应该将 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})+$/; 以支持较新的 TLD,例如 .museum 等
  • 要了解适用于电子邮件地址的 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,}))$/
【解决方案2】:

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

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

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

现在使用这个

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

干杯!

【讨论】:

  • 你应该返回emailReg.test($email);
  • 仅供参考,这对于空白电子邮件地址返回 true。例如emailReg.text("")true。我只需将函数归结为 emailReg var 的声明,然后是:return ( $email.length > 0 && emailReg.test($email))
  • 检查电子邮件地址有效性的正则表达式已过时,因为我们现在有 .museum 等 6 个字符的域名扩展名,因此您需要将 var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/; 更改为 var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,6})?$/;
  • 对,你是@h.coates!我来到这个线程希望发现 jQuery 实际上有一个内置的电子邮件验证。继续前进,这些不是您要寻找的机器人...
  • @Theo的观点很重要,但是TLD的实际长度应该在6以上,扩展名的理论上限是63个字符。目前最长的超过 20 条见data.iana.org/TLD/tlds-alpha-by-domain.txt
【解决方案3】:

出于几个原因,我会使用jQuery validation plugin

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

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

【讨论】:

  • 好的...无需重新发明轮子。但是为什么我必须安装几十 KByte 的 Javascript 来验证一个字段。如果您只需要一个新车轮,这就像建造汽车工厂:)
  • @kraftb 正如我在回答中所说,这是围绕验证的处理和显示,而不仅仅是验证文本本身。
  • 感谢@NickCraver: 这看起来确实是处理电子邮件验证问题的“最佳实践”方法。这肯定不像建造工厂(编写库来完成所有工作)来获得轮子。这就像按照工厂的说明在现代车辆上安装车轮(将汽车顶起,放置车轮 - 装上凸耳螺母),而不是试图弄清楚如何在您的汽车上安装车轮。这个插件使用起来超级简单。要进行表单验证,它实际上是一个包含、一些注释和一个方法调用。
  • 现在您正在重新发明“重新发明轮子”的比喻!
  • 对于那些被困在网络表单应用程序上的人encosia.com/using-jquery-validation-with-asp-net-webforms
【解决方案4】:

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

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

有关详细信息和示例,请参阅Email method documentation

【讨论】:

  • 最后一个还活着)
  • 但接受的格式是x@x(这很奇怪)它必须是x@x.x 我该如何解决这个问题?
  • @BasheerAL-MOMANI [jqueryvalidation.org/jQuery.validator.methods/]$.validator.methods.email = function( value, element ) { return this.optional( element ) || //^.+@.+\..+$/.test( value ); }
【解决方案5】:
<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>

【讨论】:

  • 很好的例子,我认为添加 jQuery validate 进行电子邮件验证会更容易,我们也可以做 HTML5 正则表达式,检查可能的方法:qawithexperts.com/article/jquery/…
【解决方案6】:

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 在此答案 this answer 中提供的

【讨论】:

  • 如果你在 ASP.NET MVC Razor 页面中使用它,不要忘记用另一个 @ 字符转义 @ 字符。像这样@@,否则你会得到构建错误。
【解决方案7】:

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

【讨论】:

    【解决方案8】:

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

    为什么? Verimail 支持以下内容:

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

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

    例子:

    • test@gnail.con -> 你是说 test@gmail.com 吗?
    • test@hey.nwt -> 你的意思是 test@hey.net
    • test@hottmail.com -> 你是说 test@hotmail.com 吗?

    等等..

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

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

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

    如果你有一个表单,并且想要限制它,除非电子邮件有效,否则它不能提交,那么你可以使用 getVerimailStatus 函数检查状态,如下所示:

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

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

    【讨论】:

    • .getVerimailStatus() 不返回数字状态代码,只是一个字符串值successerror 或者可能是pending(没有验证最后一个)。
    【解决方案9】:

    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 的 link 描述它的用法。
    我刚刚测试了上面的代码,得到了下面的js:

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

    这正是它应该做的事情。

    【讨论】:

    • @nbrogi 这不起作用是什么意思?我刚刚再次检查,这会产生以下 js var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/; 你的代码发生了什么?
    • 对不起,我暂时不确定,我完全改了。
    • 请在可以的时候告诉我。如果这是不好的信息,那么我会删除它。我会尽可能提供有用的信息,这有助于我在 MVC 视图中编写正则表达式。
    • 再次,我想知道为什么这被否决了。它完全符合我的要求,即在.cshtml 的正则表达式中生成@ 符号。通常它会尝试将@ 符号之后的所有内容视为剃须刀代码,但双 @@ 会阻止这种情况。
    • 我看到的主要问题是在第二个代码块中,您的正则表达式设置为一个名为 regex 的变量,但第二行使用了一个名为 re 的变量
    【解决方案10】:

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

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

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

    【讨论】:

      【解决方案11】:

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

      使用正则表达式检查

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

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

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

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

      更多信息请见https://isitarealemail.comblog post

      【讨论】:

        【解决方案12】:

        这会执行更彻底的验证,例如它会检查用户名中的连续点,例如 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);
        }
        

        validate email address using regular expression in JavaScript

        【讨论】:

        • 但是连续的点实际上是无效的吗?相反,我认为您这样做会排除有效的电子邮件地址。
        【解决方案13】:

        如果你有一个基本的表格,只需将输入类型设为电子邮件: &lt;input type="email" required&gt;

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

        some@email.com 所以@em.co 我的@fakemail.net

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

        FIDDLE EXAMPLE

        这适用于 FireFox 和 Chrome。它可能无法在 Internet Explorer 中运行……但 Internet Explorer 很烂。那么就是这样……

        【讨论】:

        • regexp 方法通常可以防止明显愚蠢的电子邮件,例如 a@b.c(您链接的 JSFiddle 示例允许使用最新的 Chrome),因此 HTML5 解决方案显然是一个不足的解决方案。
        • 酷。那么,“应该”使用 HTML5 之类的模式匹配如何呢?你为什么不在你的 chromebook 中试试这个:jsfiddle.net/du676/8
        【解决方案14】:
        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. */ }
        

        【讨论】:

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

          【讨论】:

            【解决方案16】:
            <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" />
            

            【讨论】:

              【解决方案17】:

              降落在这里......结束了: 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 Validation 插件自述文件中的注释,我发现了这一点: https://github.com/jzaefferer/jquery-validation/blob/master/README.md#reporting-an-issue

              所以,@Fabiananswer 的更新版本将是:

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

              希望有帮助

              【讨论】:

              • 这对我来说是最好的答案 - 它在 john..doe@example.com 上返回 true,但希望那是 false
              【解决方案18】:

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

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

              有什么问题?好吧,“a_z%@gmail.com 不能存在,但它可能存在通过另一个提供商提供的类似地址”a__z@provider.com。

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

              我将摘录一段以方便讲座:

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

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

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

              A__z/J0hn.sm{it!}h_comment@example.com.co
              

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

              想象一下,我无法在任何使用这些正则表达式检查的地方注册时感到沮丧!

              唯一能够真正验证电子邮件地址的是电子邮件地址的提供者。

              怎么处理,所以呢?

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

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

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

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

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

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

              【讨论】:

                【解决方案19】:

                使用这个

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

                【讨论】:

                  【解决方案20】:

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

                  【讨论】:

                    【解决方案21】:

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

                    这限制了:

                    • 字符串中没有@
                    • 字符串中没有点
                    • @ 后面超过 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();
                    }}}}}}}}}
                    

                    【讨论】:

                      【解决方案22】:

                      您可以使用jQuery Validation,并且可以在单个 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/jquery-validation@1.17.0/dist/jquery.validate.js"></script>
                      <script>
                      $("#commentForm").validate();
                      </script>
                      

                      【讨论】:

                        【解决方案23】:
                        if($("input#email-address").getVerimailStatus() < 0) { 
                        
                        (incorrect code)
                        
                        }
                        
                        if($("input#email-address").getVerimailStatus() == 'error') { 
                        
                        (right code)
                        
                        }
                        

                        【讨论】:

                        • 您能否详细说明您的答案...例如,您应该提到 getVerimailStatus 是一个附加插件。
                        【解决方案24】:
                        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" );
                        

                        参考:JQUERY UI 网站

                        【讨论】:

                          【解决方案25】:

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

                          像这样使用它:

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

                          【讨论】:

                            【解决方案26】:

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

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

                            【讨论】:

                            • Stack Overflow 是一个英文网站。请不要发布其他语言的内容。
                            • 这个答案缺少教育解释。
                            【解决方案27】:

                            您可以创建自己的功能

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

                            【讨论】:

                              【解决方案28】:

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

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

                              在他人的帮助下制作

                              【讨论】:

                                【解决方案29】:

                                此正则表达式可防止重复域名,如 abc@abc.com.com.com.com,它只允许域两次,如 abc@abc.co.in。它也不允许从像 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)?$/, 
                                

                                万事如意!!!!!!

                                【讨论】:

                                  【解决方案30】:

                                  在输入时验证电子邮件,并处理按钮状态。

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

                                  【讨论】:

                                    猜你喜欢
                                    • 1970-01-01
                                    • 2013-12-21
                                    • 1970-01-01
                                    • 2018-06-01
                                    • 2015-08-26
                                    • 1970-01-01
                                    • 2011-08-12
                                    相关资源
                                    最近更新 更多