在 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,}$"
[.'’]
部分是匹配.
、'
或’
.
的字符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。
使用正则表达式:
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,}$"
[.'’]
部分是匹配.
、'
或’
.
^[_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。