java - 当域名包含连字符时,电子邮件地址验证失败

标签 java regex validation email

我有一个电子邮件地址验证正则表达式,我在代码中使用它,如下所示:

public class Test {

  public static void main(String[] args) {
    try {
      String lineIwant = "myname@asl.ramco-group.com";
      String emailreg = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";
      Boolean b = lineIwant.matches(emailreg);

      if (b == false) {
        System.out.println("Address is Invalid");
      }else if(b == true){
        System.out.println("Address is Valid");
      }
    } catch (Exception e) {

      e.printStackTrace();
      System.out.println(e.getMessage());
    }
  }
}

对于示例中的这个特定电子邮件地址, boolean 值返回 false,而这是有效的客户电子邮件地址。

我怀疑这是因为 ramcogroup 之间的连字符,因为当我删除它时, boolean 值返回 true。

如何更改我的正则表达式以适应这样的电子邮件地址?

最佳答案

您的正则表达式不允许在 @ 符号后添加 -,因此

String emailreg = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$";

将“解决”这个特定问题。但电子邮件地址比这复杂得多。使用正则表达式验证它们并不是一个好主意。查看@DuncanJones 的评论。

关于java - 当域名包含连字符时,电子邮件地址验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16295329/

相关文章:

java - 哪个是处理离线数据的最佳数据库应用程序?

regex - 如何将 9 位或 14 位长数字与正则表达式匹配?

regex - 如何替换文件名中的数字但从中减去 1?

validation - 如何在Scala中实现简单的验证

php - 如何使 Laravel 的验证器 $rules 可选?

java - 为什么java中的Arrays.sort()方法不使用计数排序技术?

java - 在测试方法中模拟类

java - 如何解析以树形组织的数据?

java - 正则表达式 - 用逗号(引号中的逗号除外)和换行符(\n 或\r)分割字符串

javascript - jQuery 验证和占位符冲突