Java 正则表达式电子邮件验证问题
在我开始提问之前,让我先说一句:我有一套严格的电子邮件地址验证要求。我试图反驳其中一些,但被驳回了 无论如何,这些要求包括:Java 正则表达式电子邮件验证问题,java,regex,Java,Regex,在我开始提问之前,让我先说一句:我有一套严格的电子邮件地址验证要求。我试图反驳其中一些,但被驳回了 无论如何,这些要求包括: 没有连续的周期 位置1中没有特殊字符 没有直接在事件之前或之后的时段@ 允许使用以下字符:+!#$%&*/=`{|}~''.- 我满足要求的尝试是成功的,但有一个障碍。由于我用于本地部分的正则表达式,现在至少需要3个字符,这是不正确的。以下是我的尝试: (^(?!.*\\.{2})([a-zA-Z0-9{1}]+[a-zA-Z0-9\\._\\-\\+!#$%&
- 没有连续的周期
- 位置1中没有特殊字符
- 没有直接在事件之前或之后的时段@
- 允许使用以下字符:+!#$%&*/=`{|}~''.-
(^(?!.*\\.{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对于本地部分(前面的部分@),这是满足上述所有条件的正则表达式片段:
^[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 .
)*
“无连续句点”和“无直接在@之前或之后的句点”条件是由以下事实强制执行的:
只能出现在2个非点字符之间,如上面的正则表达式所示
我不完全了解电子邮件规范,因此即使它满足问题中的条件,我也不能保证根据规范该电子邮件是有效的
域部分与字符类内的
{1}
存在相同的问题
我可以自由使用限制,其中标签不得以-
开头或结尾
[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:\.[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)*
如果要强制TLD,请执行以下操作:
[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)
请注意,我使用带有I
标志的非捕获组使TLD不区分大小写。请您尝试一下(只需对代码稍作修改):
(到目前为止提供的测试地址有效。它们都不匹配。)谢谢,但我仍然需要此代码至少包含3个字符。这将拒绝
ab_@something.com
,这应该是有效的。试一试如何ab@xyz.com或a@xyz.com或a@x.com@Seb至少有三个字符,因为正则表达式有一个匹配一个字符的字符类,后跟一个必须匹配至少一个字符的类,后跟另一个必须匹配至少一个字符的类。一共三个。问题是这个正则表达式不允许在@
@ajb前面有特殊字符,我理解这一点。然而,这就是我最初询问的内容。我不知道如何满足要求并允许使用1个或更多字符。根据对原始问题的编辑,我认为应该删除(?=[^@]{3})
,但其他所有内容看起来都是正确的。@ajb:问题令人困惑。“最少3个字符”是条件之一吗?@nhahdh否这不是条件之一。由于我的正则表达式不正确,出现了至少3个字符。minumim应该是1个字符。@Seb:我删除了断言。它应该满足您的条件。@Seb:请参阅域部分的修复程序。你应该能够把一切都放在一起。感谢所有为解决我的问题做出贡献的人。:)
(^(?!.*\\.{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)$)|^$