我已经尝试了将近一个小时了,如果没有任何帮助或解释,我无法看到自己在这方面取得更大的进展。我以前用过regex,但只是非常简单的或已经做过的。
这一次,我将尝试编写一个正则表达式,以实现以下功能:
电子邮件地址必须包含一个@字符,并且在@字符后至少一个位置上至少包含一个点(.)。
到目前为止,这是我所能找到的全部,它仍然匹配电子邮件地址,例如,有一个以上的@符号。.*?@?[^@]*\.+.*
如果你能告诉我如何构造一个正则表达式来检查单个@和@后面一个或多个空格中至少一个句号,那将很有帮助。如果你能分解正则表达式并解释每个位的作用,那将很有帮助。
现在我想让它保持简单,这样它就不必是一个完全超准确的电子邮件验证表达式。
3条答案
按热度按时间1dkrff031#
借助ClasG的注解,我现在有了一个相当简单且适合我的问题的正则表达式。为了任何学习正则表达式的人将来可能遇到这个问题,我将把表达式分解如下。
表达式:
^[^@]+@[^@]+\.[^@]+$
^
匹配字符串的开头(如果是多行,则匹配行)[^@]
匹配不在此集合中的任何字符(即不是“@”)+
匹配以下一项或多项@
匹配“@”字符[^@]
匹配不在此集中的任何字符+
匹配一个或多个\.
匹配.””(句号)字符(反斜杠转义句号)[^@]
匹配不在此集中的任何字符+
匹配一个或多个$
匹配字符串的结尾(如果是多行,则匹配行)用简单的语言来说:
nmpmafwu2#
电子邮件地址必须包含一个@字符
不,不带“@”字符的电子邮件地址是完全有效的。IP地址前带有多个“@”字符的电子邮件地址是完全有效的(只要除1个字符外的所有字符都在ADDR_SPEC之外,或者在邮箱名称中用引号/转义)。
我怀疑你不是在验证一个电子邮件地址,而是一个ADDR_SPEC。Máté Safranka链接的答案描述了如何验证一个ADDR_SPEC(不是一个电子邮件地址)。除非你想验证的记录没有一个有效的互联网MX记录,并且多个'@'更有可能是一个打字错误,而不是一个有效的地址。
waxmsbnn3#
^[^\W_]+\w*(?:[.-]\w*)*[^\W_]+@[^\W_]+(?:[.-]?\w*[^\W_]+)*(?:\.[^\W_]{2,})$