【问题标题】:JavaScript Regular Expression Email Validation [duplicate]JavaScript正则表达式电子邮件验证[重复]
【发布时间】:2010-10-30 17:55:51
【问题描述】:

这段代码总是提示"null",表示字符串与表达式不匹配。

var pattern = "^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$"; 

function isEmailAddress(str) {

    str = "azamsharp@gmail.com";      

    alert(str.match(pattern)); 
    return str.match(pattern);    

}

【问题讨论】:

  • 电子邮件验证很难。务实地说,您只能假设它包含一个 @ 并且至少有一个 。在某处关注@,但如果你想避免疏远至少一些用户,那就是真的。除非您正在验证电子邮件命名策略更加结构化的特定域。
  • 严格来说,你甚至不能假设有一个 .某处。例如,请参阅 ua ccTLD,它在顶层有 MX 记录。
  • 为什么不能在表单中使用 type = "email"? @azamsharp

标签: javascript regex


【解决方案1】:

最好使用:

var pattern = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,20}$/;

这允许以下域:whatever.info(最后 4 个字母)

也可以测试,使用

pattern.test("exampleemail@testing.info")

如果有效则返回 true

http://www.w3schools.com/js/js_obj_regexp.asp

【讨论】:

  • 最高级别的域可以有4个以上的字母:data.iana.org/TLD/tlds-alpha-by-domain.txt,域'.academy'或'.afamilycompany'不通过你的情况。
【解决方案2】:

有时大多数注册和登录页面都需要验证电子邮件。在此示例中,您将学习简单的电子邮件验证。 首先在html中输入一个文本和一个像这样的按钮输入

<input type='text' id='txtEmail'/>
<input type='submit' name='submit' onclick='checkEmail();'/>

<script>
    function checkEmail() {
        var email = document.getElementById('txtEmail');
        var filter = /^(([^<>()\[\]\\.,;:\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,}))$/;
        if (!filter.test(email.value)) {
            alert('Please provide a valid email address');
            email.focus;
            return false;
        }
    }
</script>

你也可以用这个正则表达式检查

<input type='text' id='txtEmail'/>
<input type='submit' name='submit' onclick='checkEmail();'/>

<script>
    function checkEmail() {

        var email = document.getElementById('txtEmail');
        var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

        if (!filter.test(email.value)) {
            alert('Please provide a valid email address');
            email.focus;
            return false;
        }
    }
</script>

查看此演示输出,您可以在此处查看

function checkEmail() {
        var email = document.getElementById('txtEmail');
        var filter = /^(([^<>()\[\]\\.,;:\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,}))$/;
        if (!filter.test(email.value)) {
            alert('Please provide a valid email address');
            email.focus;
            return false;
        }
    }
<input type='text' id='txtEmail'/>
<input type='submit' name='submit' onclick='checkEmail();'/>

如果电子邮件无效,则发出警报消息,如果电子邮件有效,则不发出警报消息。 有关正则表达式的更多信息

https://www.w3schools.com/jsref/jsref_obj_regexp.asp

希望对你有帮助

【讨论】:

  • {2,4} 后面有+ 有什么意义?
  • 然后会显示无效邮箱,可以给我邮箱地址吗?
【解决方案3】:

用于检查电子邮件语法的简单但功能强大的电子邮件验证:

var EmailId = document.getElementById('Email').value;
var emailfilter = /^[\w._-]+[+]?[\w._-]+@[\w.-]+\.[a-zA-Z]{2,6}$/;
if((EmailId != "") && (!(emailfilter.test(EmailId ) ) )) {
    msg+= "Enter the valid email address!<br />";
}

【讨论】:

  • test@test.info 返回 false
  • 我已经测试过这种模式,它适用于所有有效的组合,例如name.surname@domain.comname.surname+label@domain.com,甚至适用于name@domain.info(具有 4 个字符的第一级域)
【解决方案4】:

用更简单的

这里是:

var regexEmail = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
var email = document.getElementById("txtEmail");

if (regexEmail.test(email.value)) {
    alert("It's Okay")
} else {
    alert("Not Okay")

}

祝你好运。

【讨论】:

  • 在写这篇文章的时候,效果很好....希望它保持这种状态,因为我已经经历了很多这样的事情;)
【解决方案5】:

晚会有点晚了,但这里什么都没有......

function isEmailValid(emailAdress) {
    var EMAIL_REGEXP = new RegExp('^[a-z0-9]+(\.[_a-z0-9]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,15})$', 'i');
    return EMAIL_REGEXP.test(emailAdress)
}

http://jsfiddle.net/yrshaikh/xvd6H/

【讨论】:

  • a@c om 不是有效的电子邮件,它通过了这种模式
  • 这个正则表达式没有经过彻底的测试。
  • @Brandon 好吗?
【解决方案6】:
function isEmailAddress(str) {
   var pattern =/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
   return pattern.test(str);  // returns a boolean 
}

【讨论】:

  • 据此test@test.info不是邮箱
【解决方案7】:

你可以给字符串对象添加一个函数

//Add this wherever you like in your javascript code
String.prototype.isEmail = function() {
    return !!this.match(/^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/);
}

var user_email = "test.email@example.com";

if(user_email.isEmail()) {
    //Email is valid !
} else {
    //Email is invalid !
}

【讨论】:

    【解决方案8】:
    var emailRegex = /^[A-Z0-9_'%=+!`#~$*?^{}&|-]+([\.][A-Z0-9_'%=+!`#~$*?^{}&|-]+)*@[A-Z0-9-]+(\.[A-Z0-9-]+)+$/i;
    if(emailRegex.test('yoursamplemail'))
    alert('valid');
    else
    alert('invalid');
    

    【讨论】:

    • 为我工作,tnx
    【解决方案9】:

    我一直在用这个....

    /^[\w._-]+[+]?[\w._-]+@[\w.-]+\.[a-zA-Z]{2,6}$/
    

    它允许+@ (xyz+abc@xyz.com) 之前

    【讨论】:

    • 这是这里唯一有效的模式!!
    • 不,域 tld 的长度超过 6 个字符,例如 .software
    【解决方案10】:

    电子邮件验证很容易出错。因此,我建议您使用Verimail.js

    为什么?

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

    Verimail.js 的另一个优点是它为最常见的电子邮件域和注册的 TLD 提供了拼写建议。对于那些拼错常见域名(如 gmail.com、hotmail.com、aol.com、aso)的用户,这可以大大降低您的跳出率。

    示例:

    • test@gnail.com -> 你是说 test@gmail.com 吗?
    • test@hottmail.con -> 你是说 test@hotmail.com 吗?

    如何使用?

    最简单的方法是下载verimail.jquery.js 并将其包含在您的页面上。 之后,通过在需要验证的输入框上运行以下函数来连接 Verimail:

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

    消息元素是一个可选元素,它显示诸如“无效电子邮件..”或“您的意思是 test@gmail.com 吗?”之类的消息。如果您有一个表单并且只想在验证电子邮件后继续,您可以使用 getVerimailStatus 函数,如下所示:

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

    getVerimailStatus 函数根据对象 Comfirm.AlphaMail.Verimail.Status 返回一个整数代码。如上所示,如果状态为负整数值,则应将验证视为失败。但如果该值大于等于0,则验证应视为成功。

    【讨论】:

      【解决方案11】:

      你也可以试试这个表达式,我已经针对很多电子邮件地址进行了测试。

      var pattern = /^[A-Za-z0-9._%+-]+@([A-Za-z0-9-]+\.)+([A-Za-z0-9]{2,4}|museum)$/;
      

      【讨论】:

        【解决方案12】:

        这是我在我的页面上使用的。

        http://www.zparacha.com/validate-email-address-using-javascript-regular-expression/

        /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/

        【讨论】:

        • 不支持“+”寻址,即“user+label@gmail.com”。
        • 这对于某些the new domains会失败
        • 干得好,谢谢。这是我见过的最好的之一。
        • 这也是无效的。查看最高级别域名列表iana.org/domains/root/db
        【解决方案13】:

        您应该记住,a-z、A-Z、0-9、.、_ 和 - 不是电子邮件地址开头的唯一有效字符。

        例如,Gmail 可让您在地址中添加“+”号以“伪造”另一封电子邮件(例如,someone@gmail.com 也会收到发送到某人+else@gmail.com 的电子邮件)。

        micky.o'finnagan@wherever.com 不会感谢您的代码阻止他们输入他们的地址......撇号在电子邮件地址中完全有效。

        上面提到的有效电子邮件地址的关闭“检查”,正如它所说的那样,非常幼稚:

        http://code.google.com/p/closure-library/source/browse/trunk/closure/goog/format/emailaddress.js#198

        我建议在您的客户端代码中非常开放,然后更加重量级,例如发送带有链接的电子邮件以真正检查它是否“有效”(如 - 在语法上对其提供商有效,并且也没有拼写错误)。

        类似这样的:

        var pattern = /[^@]+@[-a-z\.]\.[a-z\.]{2,6}/

        请记住,理论上您可以在电子邮件地址中使用两个 @ 符号,而且我什至没有在域名中包含 latin1 以外的字符!

        http://www.eurid.eu/en/eu-domain-names/idns-eu

        http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx

        【讨论】:

          【解决方案14】:

          我使用这个功能已经有一段时间了。它返回一个布尔值。

          // Validates email address of course.
          function validEmail(e) {
              var filter = /^\s*[\w\-\+_]+(\.[\w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(\.[\w\-\+_]+)*\s*$/;
              return String(e).search (filter) != -1;
          }
          

          【讨论】:

          • 我知道这是旧的,但这可以简化为:return String(e).match(/^\s*[\w\-\+_]+(?:\.[ \w\-\+_]+)*\@[\w\-\+_]+\.[\w\-\+_]+(?:\.[\w\-\+_]+ )*\s*$/);如果不匹配,它将返回 null,如果匹配,则返回电子邮件地址本身的单个项目数组。
          • 我认为您的正则表达式无法验证 nicolas.@gmail.com... 这是否符合 RFC822?我不知道。有人要验证吗?
          • 它将 aaa-------@gmail.com 设为 true
          【解决方案15】:

          您可能有兴趣查看page,它列出了用于验证电子邮件地址的正则表达式,涵盖了更一般的情况。

          【讨论】:

            【解决方案16】:

            您可能对this question(或this one)感兴趣,它强调了通过正则表达式识别有效电子邮件地址是一个非常难以解决的问题(如果可以解决的话)

            【讨论】:

              【解决方案17】:

              如果您将正则表达式定义为字符串,则所有反斜杠都需要转义,因此您应该使用 '\\w' 而不是 '\w'。

              或者,将其定义为正则表达式:

              var pattern = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/; 
              

              顺便说一句,请不要在客户端验证电子邮件地址。无论如何,您的正则表达式太简单而无法通过可靠的实现。

              在这里查看真实的东西:http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html

              【讨论】:

              • 这个正则表达式不支持像 john.smith@gmail.com 这样的地址
              • 它不支持 emailadd@gmail.com.sa 之类的电子邮件
              • 为什么不应该在客户端验证电子邮件地址?当然,这是一种更快的客户端验证形式,因为我们不需要通过网络发出多个 HTTP 请求来验证数据? (这对于可能通过慢速 Wifi 或移动网络联系服务器的移动应用程序尤其重要)。
              • 这将不支持以下电子邮件地址:bob+tag@gmail.com、bob@foo123.com 和 bob.sagat@gmail.com(正如 Nadia Alramli 已经指出的那样)
              • 这个表达式有很多不足之处:1)不允许许多有效的用户名字符,例如破折号和加号; 2) 不允许包含超过 2 个部分的域,在许多 ccTLD 中都可以找到,例如 geek.co.il; 3) 禁止使用 4 个或更多字符的许多新 TLD,例如 mobiinfo; 4) 根本不支持 IDN。
              猜你喜欢
              • 2015-07-04
              • 2014-05-11
              • 2011-10-27
              • 2014-12-09
              • 2015-12-20
              • 1970-01-01
              • 2011-06-24
              • 2012-01-01
              • 2012-10-03
              相关资源
              最近更新 更多