在 Java 正则表达式 - 电子邮件验证中,如何允许 @ 之前的撇号而不是 @ 之前的第一个和最后一个字符而不是两个连续的撇号?

In Java Regex - email validation, How to allow apostrophe before @ and not as first and last character before @ and not two consecutive apostrophe?

使用正则表达式:

EMAIL_VALID_REGEX = "^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@"+"[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*(\.[A-Za-z]{2,})$";

现在我需要在@之前允许撇号,而且它不应该允许撇号作为第一个和最后一个字符,并且在@之前也不允许两个连续的撇号。

有人可以修改上面的正则表达式来处理提到的场景吗?你能解释一下吗?

Valid emails: test@gmail.com, test's@gmail.com, t@gmail [即使之前传单字符也是有效的] 无效的电子邮件:'test@gmail.com, test'@gmail.com、'test'@gmail.com、test''s@gmail.com

您可以将 (\.[_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-z]{2,}$

在Java中用

定义
EMAIL_VALID_REGEX = "^[_A-Za-z0-9+-]+(?:[.'’][_A-Za-z0-9-]+)*@[_A-Za-z0-9-]+(?:\.[_A-Za-z0-9-]+)*\.[A-Za-z]{2,}$"

regex demo

[.'’]部分是匹配.'.

的字符class

^[_A-Za-z0-9+-]+(?:[.'’][_A-Za-z0-9-]+)*@ 部分现在匹配

  • ^ - 字符串开头
  • [_A-Za-z0-9+-]+ - 一个或多个下划线、连字符、加号、字母或数字
  • (?:[.'’][_A-Za-z0-9-]+)* - 零次或多次出现
    • [.'’] - .'
    • [_A-Za-z0-9+-]+ - 一个或多个下划线、连字符、加号、字母或数字
  • @ - 一个 @ 字符。

如果有逗号或撇号,它们将只允许出现在与 [_A-Za-z0-9-] 字符 class 匹配的字符之间,因为两者都出现了 [_A-Za-z0-9-] 模式[.'’] 的结尾用 + 量化(即它们至少需要一个字符才能匹配)。

要对 -_+ 应用相同的限制,请使用

EMAIL_VALID_REGEX = "^[A-Za-z0-9]+(?:[+_.'’-][A-Za-z0-9]+)*@[_A-Za-z0-9-]+(?:\.[_A-Za-z0-9-]+)*\.[A-Za-z]{2,}$"

参见 this regex demo