我已经尝试解决这个问题近一个小时了,如果没有任何帮助或解释,我看不到自己能取得多大进展。我以前使用过正则表达式,但只有那些非常简单或已经制作好的。
这一次,我试图弄清楚如何编写一个正则表达式来实现以下目标:
电子邮件地址必须包含 1 个 @ 字符以及 @ 字符后至少一个位置上至少一个点 (.)。
到目前为止,这就是我所能解决的所有问题,并且它仍然匹配具有多个@符号的电子邮件地址。
.*?@?[^@]*\.+.*
如果您能向我展示如何构造一个正则表达式来检查单个 @ 以及 @ 后至少一个句号和一个或多个空格,那将会很有帮助。如果您可以分解正则表达式并解释每一位的作用,那将非常有帮助。
我现在想保持简单,所以它不必是一个完整的超准确的电子邮件验证表达式。
在 ClasG 评论的帮助下,我现在有了一个相当简单且适合我的问题的正则表达式。为了学习正则表达式的人将来可能遇到这个问题,我将在下面分解这个表达式。
表情:
^[^@]+@[^@]+\.[^@]+$
^
匹配字符串的开头(如果是多行则匹配行)[^@]
匹配不在此集合中的任何字符(即不是“@”)+
匹配其中一项或多项@
匹配“@”字符[^@]
匹配不在此集合中的任何字符+
匹配一个或多个\.
匹配“.” (句号)字符(反斜杠转义句号)[^@]
匹配不在此集合中的任何字符+
匹配一个或多个$
匹配字符串的结尾(如果是多行则匹配行)用通俗易懂的语言来说:
电子邮件地址必须包含一个@字符
不,他们没有。不含“@”字符的电子邮件地址完全有效。 IP 地址前有多个“@”字符的电子邮件地址完全有效(只要除 1 之外的所有字符都在 ADDR_SPEC 之外或在邮箱名称中被引用/转义)。
我怀疑您不是在尝试验证电子邮件地址,而是在尝试验证 ADDR_SPEC。 Máté Safranka 链接的答案描述了如何验证 ADDR_SPEC(不是电子邮件地址)。除非您希望验证没有有效互联网 MX 记录的记录,并且多个“@”更有可能是拼写错误而不是有效地址....
/[a-z0-9\._%+!$&*=^|~#%'`?{}/\-]+@([a-z0-9\-]+\.){1,}([a-z]{2,16})/
可以使用以下表达式完成标准电子邮件的验证
可接受的电子邮件前缀(@之前)格式
可接受的电子邮件域名(@之后)格式
表达: ^[a-zA-Z0-9]+((([._-]?([a-zA-Z0-9]))+)?)@[a-zA-Z0-9]+(([ .-]?([a-zA-Z0-9]))+)?.[a-zA-Z]{2,}$
如果您只想接受小写字母,请仅使用“a-z”而不是“a-zA-Z”