Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式电子邮件验证问题_Java_Regex - Fatal编程技术网

Java 正则表达式电子邮件验证问题

Java 正则表达式电子邮件验证问题,java,regex,Java,Regex,在我开始提问之前,让我先说一句:我有一套严格的电子邮件地址验证要求。我试图反驳其中一些,但被驳回了 无论如何,这些要求包括: 没有连续的周期 位置1中没有特殊字符 没有直接在事件之前或之后的时段@ 允许使用以下字符:+!#$%&*/=`{|}~''.- 我满足要求的尝试是成功的,但有一个障碍。由于我用于本地部分的正则表达式,现在至少需要3个字符,这是不正确的。以下是我的尝试: (^(?!.*\\.{2})([a-zA-Z0-9{1}]+[a-zA-Z0-9\\._\\-\\+!#$%&

在我开始提问之前,让我先说一句:我有一套严格的电子邮件地址验证要求。我试图反驳其中一些,但被驳回了

无论如何,这些要求包括:

  • 没有连续的周期
  • 位置1中没有特殊字符
  • 没有直接在事件之前或之后的时段@
  • 允许使用以下字符:+!#$%&*/=`{|}~''.-
我满足要求的尝试是成功的,但有一个障碍。由于我用于本地部分的正则表达式,现在至少需要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

对于本地部分(前面的部分@),这是满足上述所有条件的正则表达式片段:

^[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)$)|^$