我的RegExp模式翻了两番" @"在电子邮件中

时间:2015-06-08 09:39:19

标签: javascript regex

你好,谁来了。

我正在学习JavaScript RegExp规则。我已经写了电子邮件验证模式。但不幸的是,它允许双重" @"在例子中。

请帮助我改进它。

^(?:\s|(?:[a-z]))(?:[a-zA-Z0-9]+.)+@(?:[a-zA-Z])+.[a-z]+\s+

还提供截图: enter image description here

4 个答案:

答案 0 :(得分:5)

您的正则表达式允许第二个@.字符的原因是:

^(?:\s|(?:[a-z]))(?:[a-zA-Z0-9]+.)+@(?:[a-zA-Z])+.[a-z]+\s+

                                                 ^

它允许任何角色。只需使用\.将其转义为仅使其为点。

答案 1 :(得分:3)

有一个标准的RFC 5322,带有一个非常复杂的正则表达式

  (?:[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])+)
     \])
然而,这不是一个非常实际的实现,最常用的标准是RFC 5322女巫匹配今天使用的所有电子邮件地址约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])?

对于更精确的正则表达式,您可以选择正则表达式,也可以在顶级lvl域上进行过滤,但是每次添加新域时都需要更新此正则表达式,因为有近无限的顶级lvl域现在不再可用了

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

答案 2 :(得分:2)

你的正则表达式似乎比需要的更复杂。你可以使用这个正则表达式:

/^\s*[a-z][\w.]+@[\w-]+(?:\.[a-z]+)+\s*$/gmi

RegEx Demo

答案 3 :(得分:0)

 /^[a-zA-Z0-9._-]+@[a-z]+.[a-z.]{2,5}$/

您可以尝试这个简单的正则表达式 请参阅:https://referencekiru.wordpress.com/2015/05/28/regular-expressions/