首页 文章

如何在JavaScript中验证电子邮件地址?

提问于
浏览
3478

如何在JavaScript中验证电子邮件地址?

30 回答

  • 173

    所有电子邮件地址都包含“at”(即@)符号 . 测试必要条件:

    email.indexOf("@") > 0
    

    不要打扰任何更复杂的事情 . 即使您可以完美地确定电子邮件在RFC语法上是否有效,但这并不能告诉您它是否属于提供它的人 . 这才是真正重要的 .

    要测试它,请发送验证消息 .

  • 11

    Wikipedia standard mail syntax :

    https://en.wikipedia.org/wiki/Email_address#Examples https://fr.wikipedia.org/wiki/Adresse_%C3%A9lectronique#Syntaxe_exacte

    function validMail(mail)
    {
        return /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()\.,;\s@\"]+\.{0,1})+([^<>()\.,;:\s@\"]{2,}|[\d\.]+))$/.test(mail);
    }
    
    // VALID MAILS
    
    validMail('Abc@example.com') // Return true
    validMail('Abc@example.com.') // Return true
    validMail('Abc@10.42.0.1') // Return true
    validMail('user@localserver') // Return true
    validMail('Abc.123@example.com') // Return true
    validMail('user+mailbox/department=shipping@example.com') // Return true
    validMail('"very.(),:;<>[]\".VERY.\"very@\\ \"very\".unusual"@strange.example.com') // Return true
    validMail('!#$%&\'*+-/=?^_`.{|}~@example.com') // Return true
    validMail('"()<>[]:,;@\\\"!#$%&\'-/=?^_`{}| ~.a"@example.org') // Return true
    validMail('"Abc@def"@example.com') // Return true
    validMail('"Fred Bloggs"@example.com') // Return true
    validMail('"Joe.\\Blow"@example.com') // Return true
    validMail('Loïc.Accentué@voilà.fr') // Return true
    validMail('" "@example.org') // Return true
    validMail('user@[IPv6:2001:DB8::1]') // Return true
    
    // INVALID MAILS
    
    validMail('Abc.example.com') // Return false
    validMail('A@b@c@example.com') // Return false
    validMail('a"b(c)d,e:f;g<h>i[j\k]l@example.com') // Return false
    validMail('just"not"right@example.com') // Return false
    validMail('this is"not\allowed@example.com') // Return false
    validMail('this\ still\"not\\allowed@example.com') // Return false
    validMail('john..doe@example.com') // Return false
    validMail('john.doe@example..com') // Return false
    

    Show this test : https://regex101.com/r/LHJ9gU/1

  • 25

    我稍微修改了Jaymon对那些想要以下列形式进行简单验证的人的答案:

    anystring@anystring.anystring

    正则表达式:

    /\S+@\S+\.\S+/
    

    JavaScript函数示例:

    function validateEmail(email) 
    {
        var re = /\S+@\S+\.\S+/;
        return re.test(email);
    }
    
  • 651

    在验证器函数中使用此代码:

    var emailID = document.forms["formName"]["form element id"].value;
    atpos = emailID.indexOf("@");
    dotpos = emailID.lastIndexOf(".");
    if (atpos < 1 || ( dotpos - atpos < 2 ))
    {
        alert("Please enter correct email ID")
        return false;
    }
    

    否则你可以使用jQuery . 内部规则定义:

    eMailId: {
        required: true,
        email: true
    }
    
  • 81

    这是从http://codesnippets.joyent.com/posts/show/1917偷来的

    email = $('email');
    filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (filter.test(email.value)) {
      // Yay! valid
      return true;
    }
    else
      {return false;}
    
  • 8

    这就是node-validator的作用:

    /^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[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]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/
    
  • 9

    有史以来最好的正则表达式,用RFC5322证实

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

  • 60

    您不应该使用正则表达式来验证输入字符串以检查它是否是电子邮件 . 这太复杂了,不会涵盖所有情况 .

    既然你只能覆盖90%的案例,那就写下:

    function isPossiblyValidEmail(txt) {
       return txt.length > 5 && txt.indexOf('@')>0;
    }
    

    你可以改进它 . 例如,'aaa @'是有效的 . 但总的来说,你得到了要点 . 并且不要忘记......一个简单的90%解决方案比不起作用的100%解决方案更好 .

    世界需要更简单的代码......

  • 16

    这是正确的RFC822版本 .

    function checkEmail(emailAddress) {
      var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
      var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
      var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
      var sQuotedPair = '\\x5c[\\x00-\\x7f]';
      var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d';
      var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22';
      var sDomain_ref = sAtom;
      var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')';
      var sWord = '(' + sAtom + '|' + sQuotedString + ')';
      var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*';
      var sLocalPart = sWord + '(\\x2e' + sWord + ')*';
      var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec
      var sValidEmail = '^' + sAddrSpec + '$'; // as whole string
    
      var reValidEmail = new RegExp(sValidEmail);
    
      return reValidEmail.test(emailAddress);
    }
    
  • 44

    使用单行正则表达式无法实现符合RFC的电子邮件地址的正确验证 . 我在PHP中找到的最佳解决方案的文章是What is a valid email address? . 显然,它已被移植到Java . 我认为这个函数太复杂了,无法在JavaScript中移植和使用 . JavaScript / node.js端口:https://www.npmjs.com/package/email-addresses .

    一个好的做法是在客户端验证您的数据,但要仔细检查服务器上的验证 . 考虑到这一点,您只需检查字符串是否看起来像客户端上的有效电子邮件地址,并对服务器执行严格检查 .

    这是我用来检查字符串是否看起来像有效邮件地址的JavaScript函数:

    function looksLikeMail(str) {
        var lastAtPos = str.lastIndexOf('@');
        var lastDotPos = str.lastIndexOf('.');
        return (lastAtPos < lastDotPos && lastAtPos > 0 && str.indexOf('@@') == -1 && lastDotPos > 2 && (str.length - lastDotPos) > 2);
    }
    

    说明:

    • lastAtPos < lastDotPos :最后 @ 应该在最后 . 之前,因为 @ 不能是服务器名称的一部分(据我所知) .

    • lastAtPos > 0 :在最后 @ 之前应该有一些东西(电子邮件用户名) .

    • str.indexOf('@@') == -1 :地址中不应该有 @@ . 即使 @ 显示为电子邮件用户名中的最后一个字符,也必须引用它,以便 " 位于 @ 和地址中的最后一个 @ 之间 .

    • lastDotPos > 2 :最后一个点之前应该至少有三个字符,例如 a@b.com .

    • (str.length - lastDotPos) > 2 :在最后一个点之后应该有足够的字符来形成双字符域 . 我不确定括号是否必要 .

  • 15

    HTML5本身有电子邮件验证 . 如果您的浏览器支持HTML5,那么您可以使用以下代码 .

    <form><input type="email" placeholder="me@example.com">
        <input type="submit">
    </form>
    

    jsFiddle链接

    来自HTML5 spec

    有效的电子邮件地址是与以下ABNF的电子邮件生成相匹配的字符串,其字符集为Unicode . email = 1 *(atext /“ . ”)“@”label (“ . ”label)
    label = let-dig [[ldh-str] let-dig]; RFC 1034第3.5节限制为63个字符的长度
    atext = <在RFC 5322第3.2.3节中定义
    let-dig = <如RFC 1034第3.5节中所定义
    ldh-str = <如RFC 1034第3.5节中所定义
    此要求是对RFC 5322的故意违反,RFC 5322定义了同时过于严格(在“@”字符之前),过于模糊(在“@”字符之后)的电子邮件地址的语法,并且过于宽松(允许注释) ,空白字符和大多数用户不熟悉的引用字符串)在这里具有实际用途 . 以下JavaScript和Perl兼容的正则表达式是上述定义的实现 . /^[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])?)
    $ /

  • 11

    Microsoft在ASP.NET MVC中提供的正则表达式是

    /^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/
    

    我在这里发布以防它有缺陷 - 尽管它总是满足我的需求 .

  • 7

    我真的很期待解决这个问题 . 所以我上面修改了电子邮件验证正则表达

    • 原创
      /^(([^<>()\[\]\\.,;:\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,}))$/

    • 已修改
      /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()\.,;\s@\"]+\.{0,1})+[^<>()\.,;:\s@\"]{2,})$/

    传递Wikipedia Email Address中的示例 .

    你可以在here看到结果 .

    enter image description here

  • 9

    很难让电子邮件验证工具100%正确 . 使其正确的唯一真正方法是向该帐户发送测试电子邮件 . 也就是说,有一些基本的检查可以帮助确保你得到一些合理的东西 .

    有些事要改进:

    而不是新的 RegExp ,只需尝试像这样编写 regexp

    if (reg.test(/@/))
    

    其次,检查以确保 @ 符号后面有一个句点,并确保 @ 和句点之间有字符 .

  • 103

    这是关于使用正则表达式验证电子邮件地址的非常好的讨论; “Comparing E-mail Address Validating Regular Expressions

    这是当前的顶级表达式,即JavaScript兼容,供参考:

    /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i
    
  • 35

    我发现这是最好的解决方案:

    /^[^\s@]+@[^\s@]+\.[^\s@]+$/
    

    它允许以下格式:

    1.  prettyandsimple@example.com
    2.  very.common@example.com
    3.  disposable.style.email.with+symbol@example.com
    4.  other.email-with-dash@example.com
    9.  #!$%&'*+-/=?^_`{}|~@example.org
    6.  "()[]:,;@\\\"!#$%&'*+-/=?^_`{}| ~.a"@example.org
    7.  " "@example.org (space between the quotes)
    8.  üñîçøðé@example.com (Unicode characters in local part)
    9.  üñîçøðé@üñîçøðé.com (Unicode characters in domain part)
    10. Pelé@example.com (Latin)
    11. δοκιμή@παράδειγμα.δοκιμή (Greek)
    12. 我買@屋企.香港 (Chinese)
    13. 甲斐@黒川.日本 (Japanese)
    14. чебурашка@ящик-с-апельсинами.рф (Cyrillic)
    

    它显然是多功能的,允许所有重要的国际角色,同时仍然执行基本的any@anything.anything格式 . 它将阻止RFC在技术上允许的空间,但它们非常罕见,我很乐意这样做 .

  • 11

    为了完整,here you have another RFC 2822 compliant regex

    官方标准称为RFC 2822.它描述了有效电子邮件地址必须遵守的语法 . 你可以(但你不应该 - 继续阅读)用这个正则表达式实现它:(?:[a-z0-9!#$%&'* / =?^ _{|}〜 - ](?: \ . [a-z0-9!#$%&'* / =?^ _ {|}〜 - ])* |“(?:[\ x01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ X21 \ x23- \ x5b \ x5d- \ 0x7F部分] | \ [\ x01- \ X09 \ X0B \ X0C \ x0e- \ 0x7F部分)“)@(:(:[A-Z0-9](? ?:[a-z0-9 - ] * [a-z0-9])?\ . )[a-z0-9](?:[a-z0-9 - ] * [a-z0-9]) ?| \ [(:( ?: 25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9])\){3 . }(?: 25 [0-5] | 2 [0-4] [0-9] | [01] [0-9] [0-9] |?[A-Z0-9 - ] * [一-z0-9]:(?:[\ x01- \ X08 \ X0B \ X0C \ x0e- \ X1F \ x21- \ X5A \ x53- \ 0x7F部分] | \ [\ x01- \ X09 \ X0B \ X0C \ x0e - \ x7f]))])(...)如果我们使用双引号和方括号省略语法,我们会得到更实际的RFC 2822实现 . 它仍将匹配当前实际使用的99.99%的电子邮件地址 . [a-z0-9!#$%&'* / =?^ _{|}〜 - ](?:\ . [a-z0-9!#$%&'* / =?^ _{ |}〜 - ]) @(?:[a-z0-9](?:[a-z0-9 - ] * [a-z0-9])?\ . )[a-z0-9]( ?:[A-Z0-9 - ] * [A-Z0-9])?您可以进行的进一步更改是允许任何双字母国家/地区代码顶级域,并且只允许特定的通用顶级域 . 此正则表达式过滤虚拟电子邮件地址,如asdf@adsf.adsf . 您需要在添加新的顶级域时更新它 . [a-z0-9!#$%&'* / =?^ _{|}〜 - ](?:\ . [a-z0-9!#$%&'* / =?^ _{ |}〜 - ])* @(?:[a-z0-9](?:[a-z0-9 - ] * [a-z0-9])?\ . )(?:[AZ] {2 } | com | org | net | gov | mil | biz | info | mobi | name | aero | jobs | museum)\ b因此,即使遵循官方标准,仍然需要权衡利弊 . 不要盲目地从在线图书馆或论坛中复制正则表达式 . 始终使用您自己的数据和您自己的应用程序测试它们 .

    强调我的

  • 10

    哇,这里有很多复杂性 . 如果您只想捕获最明显的语法错误,我会做这样的事情:

    ^\S+@\S+$
    

    它通常捕获用户做出的最明显的错误,并确保表单大部分是正确的,这就是JavaScript验证的全部内容 .

  • 12

    我对regular expressions的了解并不是那么好 . 那's why I check the general syntax with a simple regular expression first and check more specific options with other functions afterwards. This may not be not the best technical solution, but this way I'方式更灵活,更快捷 .

    我遇到的最常见的错误是空格(特别是在开头和结尾),偶尔也会出现双点 .

    function check_email(val){
        if(!val.match(/\S+@\S+\.\S+/)){ // Jaymon's / Squirtle's solution
            // Do something
            return false;
        }
        if( val.indexOf(' ')!=-1 || val.indexOf('..')!=-1){
            // Do something
            return false;
        }
        return true;
    }
    
    check_email('check@thiscom'); // Returns false
    check_email('check@this..com'); // Returns false
    check_email(' check@this.com'); // Returns false
    check_email('check@this.com'); // Returns true
    
  • 8

    只需使用HTML查看输入的电子邮件地址是否有效 .

    <input type="email"/>
    

    没有必要编写用于验证的函数 .

  • 64

    正则表达式更新2018年!试试这个

    let val = 'email@domain.com';
    if(/^[a-z0-9][a-z0-9-_\.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val)) {
       console.log('passed');
    }
    

    typscript版本完成

    //
    export const emailValid = (val:string):boolean => /^[a-z0-9][a-z0-9-_\.]+@([a-z]|[a-z0-9]?[a-z0-9-]+[a-z0-9])\.[a-z0-9]{2,10}(?:\.[a-z]{2,10})?$/.test(val);
    

    更多信息https://git.io/vhEfc

  • 4017

    显然,就是这样:

    /^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i
    

    摘自10月1日的http://fightingforalostcause.net/misc/2006/compare-email-regex.php .

    但是,当然,这忽视了国际化 .

  • 12

    使用regular expressions可能是最好的方法 . 你可以看到一堆测试here(取自chromium

    function validateEmail(email) {
        var re = /^(([^<>()\[\]\\.,;:\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,}))$/;
        return re.test(String(email).toLowerCase());
    }
    

    以下是接受unicode的常规表达示例:

    var re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
    

    但请记住,不应该只依赖JavaScript验证 . 可以轻松禁用JavaScript . 这也应该在服务器端验证 .

    以下是上述操作的示例:

    function validateEmail(email) {
      var re = /^(([^<>()[\]\\.,;:\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,}))$/;
      return re.test(email);
    }
    
    function validate() {
      var $result = $("#result");
      var email = $("#email").val();
      $result.text("");
    
      if (validateEmail(email)) {
        $result.text(email + " is valid :)");
        $result.css("color", "green");
      } else {
        $result.text(email + " is not valid :(");
        $result.css("color", "red");
      }
      return false;
    }
    
    $("#validate").bind("click", validate);
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <form>
      <p>Enter an email address:</p>
      <input id='email'>
      <button type='submit' id='validate'>Validate!</button>
    </form>
    
    <h2 id='result'></h2>
    
  • 297

    JavaScript可以匹配正则表达式:

    emailAddress.match( / some_regex /);
    

    这是电子邮件的RFC22正则表达式:

    ^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*
    "\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x
    7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<
    !\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])
    [^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$
    
  • 49
    <form name="validation" onSubmit="return checkbae()">
        Please input a valid email address:
    <input type="text" size=18 name="emailcheck"> <input type="submit" value="Submit"> </form> <script language="JavaScript1.2"> var testresults function checkemail(){ var str = document.validation.emailcheck.value var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i if (filter.test(str)) testresults = true else { alert("Please input a valid email address!") testresults = false } return (testresults) } </script> <script> function checkbae(){ if (document.layers || document.getElementById || document.all) return checkemail() else return true } </script>
  • 305

    不检查TLD是否存在的解决方案不完整 .

    几乎所有这些问题的答案都建议使用Regex来验证电子邮件地址 . 我认为Regex只适用于初步验证 . 似乎电子邮件地址的检查验证实际上是两个独立的问题:

    1- Validation of email format: 确保电子邮件符合RFC 5322中电子邮件的格式和模式,以及TLD是否确实存在 . 可以找到所有有效TLD的列表here .

    例如,虽然地址 example@example.ccc 将通过正则表达式,但它不是有效的电子邮件,因为 ccc 不是IANA的顶级域名 .

    2- Making sure the email actually exists: 为此, the only optionto send the users an email .

  • 39

    在现代浏览器中,您可以使用纯JavaScript和DOM构建@Sushil的答案:

    function validateEmail(value) {
      var input = document.createElement('input');
    
      input.type = 'email';
      input.required = true;
      input.value = value;
    
      return typeof input.checkValidity === 'function' ? input.checkValidity() : /\S+@\S+\.\S+/.test(value);
    }
    

    我把小提琴中的一个例子放在一起http://jsfiddle.net/boldewyn/2b6d5/ . 结合特征检测和Squirtle's Answer的简单验证,它使您摆脱了正则表达式屠杀和不会在旧浏览器上出现问题 .

  • 13

    做这个:

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

    为什么? It's based on RFC 2822 ,这是一个标准的所有电子邮件地址必须坚持 .

    通常,当在数据库中存储电子邮件地址时,我将它们设置为小写,并且在实践中,正则表达式通常可以标记为不区分大小写 . 在这些情况下,这会略短:

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

    以下是在JavaScript中使用它的示例(最后使用不区分大小写的标志 i ) .

    var emailCheck=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;
    console.log( emailCheck.test('some.body@domain.co.uk') );
    

    Note
    从技术上讲,一些电子邮件可以在 @ 符号之前的部分中包含引号,并在引号内包含转义字符(因此,您的电子邮件用户可能会讨厌并且包含 @"..." 等内容,只要's written in quotes). NOBODY DOES THIS EVER! It'已经过时 . 但是,它包含在真实中RFC 2822标准,此处省略 .

    更多信息:http://www.regular-expressions.info/email.html

  • 19

    与squirtle相比,这是一个复杂的解决方案,但它可以很好地正确验证电子邮件:

    function isEmail(email) { 
        return /^((([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.test(email);
    }
    

    使用如下:

    if (isEmail('youremail@yourdomain.com')){ console.log('This is email is valid'); }
    
  • 597

    你决定使用正则表达式来验证电子邮件,你需要了解的第二件事:It's probably not a good idea . 一旦你接受了这个,那里有很多实现可以让你到达那里,this article sums them up nicely.

    简而言之,唯一的方法是绝对,确定用户输入的内容实际上是电子邮件,实际上是发送电子邮件并查看会发生什么 . 除此之外,这一切都只是猜测 .

相关问题