电子邮件地址验证,再次

时间:2009-09-22 00:28:36

标签: regex

查看此处有关电子邮件地址验证的帖子,我希望对我正在执行的客户端测试更加自由。

我到目前为止最接近的是:

^([\w-\.]+)@((\[[0–9]{1,3}\.[0–9]{1,3}\.[0–9]{1,3}\.)|(([\w-]+\.)+))
([a-zA-Z]{2,4}|[0–9]{1,3})(\]?)$

这与根据RFC有效的#strnage@foo.com不匹配

  • 大写和小写英文字母(a-z,A-Z)
  • 数字0到9
  • 人物! #$%& '* + - / =? ^ _` {| }〜
  • 性格。 (点,句号,句号),前提是它不是第一个或最后一个字符,并且也表示连续两次或多次不出现。

我想要一个非常简单的匹配:

  • 不是以。
  • 开头
  • 任何允许进入@
  • 的角色
  • @
  • 之后允许的任何字符
  • 没有连续。或@允许
  • 最后一部分。 (tld)必须是[a-z0-9-]

我将使用\ i使搜索大小写不敏感。连续的角色是我被挂断的地方。

7 个答案:

答案 0 :(得分:4)

如果您想与官方标准匹配,you can use

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[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-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
  

因此,即使遵循官方标准,仍然需要权衡利弊。 不要盲目地从在线图书馆或论坛中复制正则表达式。始终使用您自己的数据和自己的应用程序对其进行测试。

答案 1 :(得分:1)

/^[^.].*@(?:[-a-z0-9]+\.)+[-a-z0-9]+$/

答案 2 :(得分:0)

function validator(email) {
   var bademail = false;
   bademail = (email.indexOf(".") == 0) ? true : bademail;
   bademail = (email.indexOf("..") != -1) ? true : bademail;
   bademail = (email.indexOf("@@") != -1) ? true : bademail;
   if(!bademail) {
      var tldTest = new RegExp("[a-z0-9-]");
      var lastperiodpos = email.lastIndexOf(".");
      var tldstr = email.slice(lastperiodpos + 1);
      bademail = (!(tldTest.test(tldstr))) ? true : bademail;
   } 
   return bademail;
}

答案 3 :(得分:0)

这取决于谁在使用您的应用程序。对于内部应用程序,通常用户名是有效的电子邮件地址。许多RFC-822电子邮件规范描述了可能存在于电子邮件地址中的其他字段。例如,Allen Town是一个非常标准的电子邮件地址,您可以在其中输入您喜欢的邮件客户端。但是,对于应用程序,您可能希望在发送电子邮件时将名称添加到电子邮件地址,并且不希望它成为用户地址的一部分。

验证电子邮件地址最自由的方法是尝试向用户提供的任何地址发送电子邮件。如果他们收到了电子邮件,并且可以确认,那么这是一个有效的地址。

答案 4 :(得分:0)

可以找到符合Perl-ish RFC822的正则表达式here

答案 5 :(得分:0)

以下对我来说已经有一段时间了。

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

答案 6 :(得分:-1)

完美的验证正则表达式可能很难匹配,但我已经使用了这个很长一段时间了:

/^([\w-\.\+])+\@([\w-]+\.)+([\w]{2,6})+$/

最近才改变它以匹配6-char TLD。