【问题标题】:JQuery/javascript email validation with regex [duplicate]使用正则表达式进行 JQuery/javascript 电子邮件验证 [重复]
【发布时间】:2014-05-08 14:30:40
【问题描述】:

我一直在寻找一个好的正则表达式来验证电子邮件,但对于我发现的大多数人来说,我看到人们评论说正则表达式已经过时,或者它不起作用......所以我希望有人可以帮助我解决目前对所有电子邮件都有效的电子邮件验证正则表达式...

这是我目前的情况:我看到有人说 emailReg2 已过时并产生误报,但没有看到任何关于 emailReg1 已过时的信息。

var emailReg1 = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,6})?$/;
var emailReg2 = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;

function IsEmail(email) {
  var regex = //which regex do I put here?
  return regex.test(email);
}

非常感谢任何澄清。谢谢!

【问题讨论】:

  • @PedroLobito 我做了...有人编辑了问题说我没有搜索...这实际上有点令人沮丧...我记得我在开头特别说过I have been searching for some time...
  • 我回滚了你的问题,它仍然无法解释为什么这个问题不像你的stackoverflow.com/questions/46155/…
  • @PedroLobito 这是一个 5 年前的问题,答案中的第一条评论是:This regex eliminates valid, in-use emails. Do not use. Google for "RFC822" or "RFC2822" to get a proper regex.
  • 答案同样有效。更不用说电子邮件地址并没有太大变化。
  • @Adjit 还注意到“bogus@nonexistant.com”是一个有效的电子邮件地址。

标签: javascript jquery regex validation email


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

【讨论】:

    【解决方案2】:

    对于验证电子邮件地址的正则表达式,您应该查看您的需求并确定您确实需要一些复杂的东西还是非常简单的东西。

    对于一个简单(和 hackish)的正则表达式:

    .+?@.+?\..+
    

    深入:

    .+?   # At least 1 or more character, non-greedy; matches everything before the @ sign
    @     # literal @
    .+?   # Same as above; matches everything before the .
    \.    # literal .
    .+    # match everything after
    

    这不适用于像 appname.appspotmail.com 这样的域,因为它有多个句号,但应该满足您的需求。

    您可以修改上述正则表达式以接受此类条件。如前所述,这完全取决于您的需求。电子邮件验证没有更好或更差的正则表达式;只有一个正则表达式可以完美满足您的需求,而一个正则表达式不必要地冗长。

    如果可能,您应该提出自己的正则表达式,而不是使用其他正则表达式,因为您是唯一知道自己需求的人。

    如果您必须使用符合 RFC 的内容,请查看这个极其冗长的正则表达式:http://ex-parrot.com/~pdw/Mail-RFC822-Address.html 但是,我不鼓励您使用该正则表达式,而是寻找一个验证电子邮件地址的库。不过,您可能不需要遵守 RFC。

    如果你想要调试正则表达式的资源,试试http://regex101.com

    【讨论】:

    • 那么我是否能够制作更复杂的正则表达式...如果第一次失败,请尝试使用不同的正则表达式来检查多个句号?所以下一个正则表达式类似于.+?@.+?\..+?.+
    • 你会使用闭包。获取正则表达式指南; amazon.com/Mastering-Regular-Expressions-Jeffrey-Friedl/dp/… 是最好的 IMO 之一
    【解决方案3】:

    我用于电子邮件验证的正则表达式是

    ^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$
    

    最佳电子邮件验证有许多关于 SO 的正则表达式问题。

    Best Regular Expression for Email Format Validation with ASP.NET 3.5 Validation

    Validate email address in JavaScript?

    Using a regular expression to validate an email address

    从我的大部分研究中,您会发现大量可以验证大多数电子邮件地址的正则表达式,但我从未找到能够捕获所有电子邮件的正则表达式。您必须找到最适合您需求的那个。

    【讨论】:

      猜你喜欢
      • 2014-03-03
      • 2010-10-30
      • 2015-07-04
      • 2021-01-07
      • 1970-01-01
      • 2012-09-25
      • 2014-05-11
      • 2011-10-27
      相关资源
      最近更新 更多