用于验证电子邮件中用户名部分的正则表达式

问题描述 投票:0回答:1

我正在尝试在 java 中创建一个正则表达式来根据这些标准验证用户名:

  • 它可以以字母数字字符或 _ 或 - 或开头。
  • @ 符号之前的任何位置应至少包含两个字母数字字符
  • @简单域名验证后

示例

我创建了类似下面的东西,但它对我不起作用。

^(?=.*[a-zA-Z0-9]{2})[a-zA-Z0-9_.-]+@[a-zA-Z0-9.-]+$

regex regex-lookarounds
1个回答
0
投票

您使用前瞻的想法是正确的,但您在其中使用

.
,并且
.
匹配除换行符之外的任何字符。您需要的是将其限制为仅匹配
@
以外的字符。此外,
{2}
限制量词仅应用于
[a-zA-Z0-9]
字符类,要匹配不相交的字母数字两次,您需要对字母数字和字母数字字符模式以外的字符进行分组。

所以,它看起来像

^(?=(?:[^@a-zA-Z0-9]*[a-zA-Z0-9]){2})[a-zA-Z0-9_.-]+@[a-zA-Z0-9.-]+$

请参阅 此正则表达式演示

但是,在许多情况下,它可能不是可用的电子邮件正则表达式,请注意,匹配“潜在”电子邮件的最简单模式是

^[^\s@]+@\S+$
,如果您想对此模式应用相同的限制,它看起来像
 ^(?=(?:[^@a-zA-Z0-9]*[a-zA-Z0-9]){2})[^\s@]+@\S+$

一些细节

  • ^
    - 字符串的开头
  • (?=(?:[^@a-zA-Z0-9]*[a-zA-Z0-9]){2})
    - 正向先行,匹配以下序列的两个连续出现:除 ASCII 字母和数字之外的零个或多个字符以及
    @
    (
    [^@a-zA-Z0-9]*
    ),然后是 ASCII 字母数字 (
    [a-zA-Z0-9]
    )
  • [a-zA-Z0-9_.-]+@[a-zA-Z0-9.-]+
    - 一个或多个 ASCII 字母、数字、下划线、点或连字符,然后是一个
    @
    字符,然后又是一个或多个 ASCII 字母、数字、下划线、点或连字符
  • $
    - 字符串结尾。
© www.soinside.com 2019 - 2024. All rights reserved.