电子邮件

时间:2018-05-14 12:17:20

标签: javascript regex

我现在已经尝试了近一个小时了,而且在没有任何帮助或解释的情况下,我无法进一步了解它。我之前使用过正则表达式,但只使用了非常简单或已经制作的正则表达式。

这一次,我试图找出如何编写实现以下目标的正则表达式:

  

电子邮件地址必须包含一个@字符,并且@字符后面至少有一个点(。)至少一个位置。

到目前为止,这是我能够解决的问题,它仍然匹配电子邮件地址,例如,有多个@符号。

.*?@?[^@]*\.+.*

如果你能告诉我如何构造一个正则表达式来检查单个@和至少一个句点@之后的一个或多个空格,那将会很有帮助。如果您可以分解正则表达式并解释每个位的作用,那将非常有用。

我想暂时保持简单,因此它不一定是一个完整的超准确的电子邮件验证表达。

2 个答案:

答案 0 :(得分:3)

  

电子邮件地址必须包含一个@字符

不,他们没有。没有“@”字符的电子邮件地址完全有效。在IP地址之前具有多个“@”字符的电子邮件地址完全有效(只要1以外的所有字符都在ADDR_SPEC之外或在邮箱名称中引用/转义)。

我怀疑您没有尝试验证电子邮件地址,而是ADDR_SPEC。由MátéSafranka链接的答案描述了如何验证ADDR_SPEC(不是电子邮件地址)。除非您希望验证没有有效的互联网MX记录的记录,否则不止一个'@'更可能是一个错字而不是一个有效的地址....

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

答案 1 :(得分:3)

在ClasG的评论的帮助下,我现在有一个相当简单和适合我的问题的正则表达式。为了能够学习将来可能会遇到这个问题的正则表达式,我会在下面打破这个表达。

表达式:^[^@]+@[^@]+\.[^@]+$

  • ^匹配字符串的开头(或多行时的行)
  • [^@]匹配任何不在此集合中的字符(即不是“@”)
  • +匹配一个或多个
  • @匹配“@”字符
  • [^@]匹配此集合中不存在的任何字符
  • +匹配一个或多个
  • \.匹配“。” (句号)(反斜杠逃脱句号)
  • [^@]匹配此集合中不存在的任何字符
  • +匹配一个或多个
  • $匹配字符串的结尾(如果是多行,则匹配行)

用简单的语言:

  • 从字符串或行的开头
  • 开始
  • 包括除@以外的所有字符,直到@ sign
  • 包括@ sign
  • 在@符号后面包括除@以外的所有字符,直至句号
  • 在完全停止后包括除@以外的所有字符
  • 停在字符串或行的末尾