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

新手上路,请多包涵

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

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

电子邮件地址必须包含一个 @ 字符和至少一个点 (.) 在 @ 字符后的至少一个位置。

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

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

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

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

原文由 Dog Lover 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 263
2 个回答

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

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

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

用简单的语言:

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

原文由 Dog Lover 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

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

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

原文由 symcbean 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题