我正在尝试在 java 中创建一个正则表达式来根据这些标准验证用户名:
示例
我创建了类似下面的东西,但它对我不起作用。
^(?=.*[a-zA-Z0-9]{2})[a-zA-Z0-9_.-]+@[a-zA-Z0-9.-]+$
您使用前瞻的想法是正确的,但您在其中使用
.
,并且 .
匹配除换行符之外的任何字符。您需要的是将其限制为仅匹配 @
以外的字符。此外,{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 字母、数字、下划线、点或连字符$
- 字符串结尾。