在我提出问题之前,让我先说一下:我对电子邮件地址验证有一套严格的要求。我试图对其中的一些提出异议,但被推翻了。
无论如何,要求如下:
我满足要求的尝试是成功的,只有一个障碍。由于我用于本地部分的正则表达式,现在需要至少3个字符的错误。这是我的尝试:
(^(?!.*\\.{2})([a-zA-Z0-9{1}]+[a-zA-Z0-9\\._\\-\\+!#$%&*/=?`{|}~']+[a-zA-Z0-9{1}])+@([a-zA-Z0-9{1}]+[a-zA-Z0-9\\-]+[a-zA-Z0-9{1}]+\\.)+([a-zA-Z0-9\\-]{2}|net|com|gov|mil|org|edu|int|NET|COM|GOV|MIL|ORG|EDU|INT)$)|^$
我理解为什么会这样,我只是不知道如何绕过它。非常感谢任何帮助。
已编辑:经过多次讨论后,发现我的问题并非特定于电子邮件地址的本地部分。域名部分也遇到了同样的问题。
谢谢, SEB
答案 0 :(得分:2)
对于本地部分(@
之前的部分),这是满足上述所有条件的正则表达式片段:
^[a-zA-Z0-9][a-zA-Z0-9+!#$%&*/=?`{|}~'_-]*(\.[a-zA-Z0-9+!#$%&*/=?`{|}~'_-]+)*
故障:
^ # Beginning of the string
[a-zA-Z0-9] # First character is not special
[a-zA-Z0-9+!#$%&*/=?`{|}~'_-]* # 0 or more alphanumeric and special characters, except .
(?: # Group, repeated 0 or more times
\. # A literal .
[a-zA-Z0-9+!#$%&*/=?`{|}~'_-]+ # 1 or more alphanumeric and special characters, except .
)*
“没有连续的时间段”和“.
只能出现在{1}
之间,因此强制实施@ {>条件之前或之后的时间段2个非点字符,如上面的正则表达式所示。
我不完全了解电子邮件规范,因此即使它满足问题中的条件,我也无法保证电子邮件是符合规范的有效电子邮件强> 的
域名部分在字符类中有-
同样的问题。
我冒昧地使用hostname上的限制,其中标签不得以[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:\.[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)*
开头或结尾。
[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:\.[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)*\.(?i:[a-z0-9]{2}|net|com|gov|mil|org|edu|int)
如果您想强制执行TLD:
i
请注意,我使用带有{{1}}标记的非捕获组使TLD不区分大小写。
答案 1 :(得分:0)
请你试试这个(只需稍微修改一下代码):
(^(?!.*\\.{2})([a-zA-Z0-9][a-zA-Z0-9\\._\\-\\+!#$%&*/=?`{|}~']+[a-zA-Z0-9])+@([a-zA-Z0-9]+[a-zA-Z0-9\\-]+[a-zA-Z0-9]\\.)+([a-zA-Z0-9\\-]{2}|net|com|gov|mil|org|edu|int|NET|COM|GOV|MIL|ORG|EDU|INT)$)|^$
(到目前为止提供的测试地址有效。它们都不匹配。)