电子邮件的简单正则表达式模式

问题描述 投票:0回答:4

我已经尝试解决这个问题近一个小时了,如果没有任何帮助或解释,我看不到自己能取得多大进展。我以前使用过正则表达式,但只有那些非常简单或已经制作好的。

这一次,我试图弄清楚如何编写一个正则表达式来实现以下目标:

电子邮件地址必须包含 1 个 @ 字符以及 @ 字符后至少一个位置上至少一个点 (.)。

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

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

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

我现在想保持简单,所以它不必是一个完整的超准确的电子邮件验证表达式。

javascript regex
4个回答
20
投票

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

表情:

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

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

用通俗易懂的语言来说:

  • 从字符串或行的开头开始
  • 包括除 @ 之外的所有字符,直到 @ 符号
  • 包含@符号
  • 在 @ 符号之后包含除 @ 之外的所有字符,直到句号
  • 句号后包含除 @ 之外的所有字符
  • 停在字符串或行的末尾

6
投票

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

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

我怀疑您不是在尝试验证电子邮件地址,而是在尝试验证 ADDR_SPEC。 Máté Safranka 链接的答案描述了如何验证 ADDR_SPEC(不是电子邮件地址)。除非您希望验证没有有效互联网 MX 记录的记录,并且多个“@”更有可能是拼写错误而不是有效地址....

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

0
投票

可以使用以下表达式完成标准电子邮件的验证

可接受的电子邮件前缀(@之前)格式

  • 允许的字符:字母 (a-z)、数字、下划线、句点和破折号。
  • 下划线、句点或破折号后面必须跟一个或多个字母或数字。

可接受的电子邮件域名(@之后)格式

  • 允许的字符:字母、数字、破折号。
  • 域名的最后部分必须至少包含两个字符,例如:.com、.org、.cc

表达: ^[a-zA-Z0-9]+((([._-]?([a-zA-Z0-9]))+)?)@[a-zA-Z0-9]+(([ .-]?([a-zA-Z0-9]))+)?.[a-zA-Z]{2,}$

  • ^:匹配字符串的开头
  • [a-zA-Z0-9]+:匹配一个或多个 (+) 字母和数字
  • ((([._-]?([a-zA-Z0-9]))+)?):可选块 (?),匹配任何单个“._-”后跟至少一个字母或数量
  • @:匹配“@”
  • [a-zA-Z0-9]+:匹配一个或多个 (+) 字母和数字
  • (([.-]?([a-zA-Z0-9]))+)?:可选块 (?),匹配任何单个“.-”后跟至少一个字母或数字
  • .:匹配“.” (需要转义)
  • [a-zA-Z]{2,}:匹配两个或多个 ({2,}) 个字母

如果您只想接受小写字母,请仅使用“a-z”而不是“a-zA-Z”


-1
投票

^[^\W_]+\w*(?:[.-]\w*)*[^\W_]+@[^\W_]+(?:[.-]?\w*[^\W_]+)*(?:\.[^\W_]{2,})$

© www.soinside.com 2019 - 2024. All rights reserved.