任何人都可以帮我找到使用“java regex”解决此问题的方法吗?
问题:EmailId 应采用以下格式<<第 1 部分>>.<<第 2 部分>>@<<第 3 部分>><<第 4 部分>>
第 1 部分应包含字母数字字符,并且必须至少包含 1 个大写字母、1 个小写字母和 1 个数字。
第二部分应包含字母数字字符。
第三部分应该是长度为 3 到 8 的字母值。
第四部分可以是“.com”或“.co.in”
我的解决方案是:
if(EmailId.matches(""^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{3,}\\.[\\w&&[^_]]+@[\\w&&[^_]]{3,8}\\.(com|co\\.in)")){
return true;
}
但此解决方案接受“RAKESH1.Roshan@infy.co.in”此电子邮件 ID,这是 Not Acceptable 。
我不知道我错在哪里。
请帮忙!!!!!!!!!
最佳答案
由于您的模式中使用了 .
,因此您的正则表达式无法正常工作。如果您不允许所有字符,则应仅坚持您允许的特定类别的字符。
我建议:
.matches("(?=\\p{Alnum}*\\p{Upper})(?=\\p{Alnum}*[0-9])(?=\\p{Alnum}*\\p{Lower})\\p{Alnum}*[.]\\p{Alnum}+@\\p{Alpha}{3,8}[.]co(m|[.]in)"))
请参阅Java demo 。由于该模式与 .matches()
一起使用,因此不需要开头的 ^
和结尾的 $
anchor 。
详细信息:
(?=\\p{Alnum}*\\p{Upper})
- 从字符串的开头开始,0+ 个字母数字字符后必须有一个大写字母- `(?=\p{Alnum}*[0-9]) - 从字符串的开头开始,0+ 个字母数字字符后面必须有一个数字
(?=\\p{Alnum}*\\p{Lower})
- 从字符串的开头开始,0+ 个字母数字字符后必须有一个小写字母\\p{Alnum}*
- 0 个或多个字母数字字符(如果需要至少 1 个,请将*
替换为+
)[.]
- 文字.
char\\p{Alnum}+
- 1 个或多个字母数字字符@
- 文字@
字符\\p{Alpha}{3,8}
- 3 到 8 个或更多字母字符[.]co(m|[.]in)
-.com
或.co.in
位于字符串末尾。
关于java - 使用 java 正则表达式进行电子邮件 ID 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44471219/