【问题标题】:Validating email addresses using jQuery and regex使用 jQuery 和正则表达式验证电子邮件地址
【发布时间】:2021-05-02 09:26:41
【问题描述】:

我不太确定该怎么做。我需要使用正则表达式验证电子邮件地址,如下所示:

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

然后我需要在这样的 jQuery 函数中运行它:

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

验证去哪里,表达式是什么?

【问题讨论】:

标签: regex validation email email-validation


【解决方案1】:

更新


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

【讨论】:

  • 感谢 aSeptik 除了“缺少”邮件地址中的 e 之外,它运行良好是的,知道没有 100% 的正则表达式存在,但可以“非常”接近
  • 没有验证太深,但它已经给我一个 asdf@adsf.com 的误报
  • @gcb:嗨,如果正则表达式不能满足您的需求,您可以更改它,无论如何我已经对其进行了测试并且它工作正常。 jsfiddle.net/ADPaM
  • 客户端单独的正则表达式,不知道是否有邮件服务器,也不知道域本身是否存在。它只检查任何电子邮件的语法是否有效。它只是为了帮助用户写正确的地址。它不是验证。
  • 完美运行!谢谢老哥
【解决方案2】:

这是我的解决方案:

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

在这里找到 RegExp:http://mdskinner.com/code/email-regex-and-validation-jquery

【讨论】:

  • 你关于加号的观点是有效的,但你的正则表达式不如我在我的例子中使用的那个好。 ps:我已经更新了我的正则表达式以支持加号。
  • 大多数时候,您只想验证用户输入的电子邮件格式是否正确。识别诸如“2”而不是“@”之类的拼写错误。所以我比原来的答案更喜欢这个,但 aSeptik 的答案很全面,我也赞成。
  • test@gmail..com 它说是有效的 - 错误,更改正则表达式
【解决方案3】:
$(document).ready(function() {
  $('#emailid').focusout(function(){
    $('#emailid').filter(function(){
      var email = $('#emailid').val();
      var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
      if ( !emailReg.test( email ) ) {
        alert('Please enter valid email');
      } else {
        alert('Thank you for your valid email');
      }
    });
  });                 
});

【讨论】:

  • 实际上这很有帮助。标题是 JQuery,这是迄今为止唯一有一个像样的 jquery 示例的答案。
  • 这验证 abc.b.@yahoo.com
【解决方案4】:

Lolz 这好多了

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

【讨论】:

  • 我更喜欢您的移动网站解决方案。另一个会让我的智能手机融化;)+1
  • javascript 语法问题
  • 它不会验证äüõ等字母!!
【解决方案5】:

我建议您将the jQuery plugin 用于Verimail.js

为什么?

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

怎么做?

在您的网站上包含verimail.jquery.js 并使用该功能:

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

如果您有一个表单并想在提交时验证电子邮件,您可以使用 getVerimailStatus 函数:

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

【讨论】:

  • Verimail 不断验证 keyup,这意味着,一旦您开始输入,您就会收到一条错误消息。通常很棒的插件,但这个插件是一个交易破坏者 - 我宁愿仅在手动触发时进行验证,即在单击提交按钮或离开字段之前。
【解决方案6】:

Javascript:

var pattern = new RegExp("^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$");
var result = pattern .test(str);


正则表达式不允许用于:

abc@gmail..com
abc@gmail.com..


允许:

abc.efg@gmail.com
abc@gmail.com.my

来源:http://www.mkyong.com/regular-expressions/10-java-regular-expression-examples-you-should-know/

【讨论】:

    【解决方案7】:

    我们也可以使用正则表达式 (/^([\w.-]+)@([\w-]+)((.(\w){2,3})+)$/i) 来验证电子邮件地址格式是否正确。

    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;
    

    【讨论】:

      【解决方案8】:

      试试这个

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

      【讨论】:

        【解决方案9】:

        你可以使用这个功能

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

        【讨论】:

          【解决方案10】:

          本机方法:

          $("#myform").validate({
           // options...
          });
          
          $.validator.methods.email = function( value, element ) {
            return this.optional( element ) || /[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}/.test( value );
          }
          

          来源:https://jqueryvalidation.org/jQuery.validator.methods/

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-04-05
            • 2011-02-14
            • 1970-01-01
            • 1970-01-01
            • 2015-08-24
            相关资源
            最近更新 更多