java - 使用 java 正则表达式进行电子邮件 ID 验证

标签 java regex jakarta-ee

任何人都可以帮我找到使用“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/

相关文章:

java - 取消选择 JTextfield 上的默认选择

java - 系统异常或应用异常

java - 在找到的模式之间拆分字符串

java - 通过蓝牙在android 2.3中共享文件

C# 正则表达式仅在标签外部替换字符串

javascript - 提取 Javascript 数组

Javascript 正则表达式返回 # 字符,即使它没有被捕获

java - JSF FlowScoped 和 CDI ConversationScoped 之间的区别

java - 如何在 jsr352 中配置可重试/可跳过的异常

java - 修改 JTable 单元格中的文本对齐方式