杰瑞科技汇

Java email正则表达式如何正确编写?

Java 电子邮件正则表达式

在 Java 中验证电子邮件地址,可以使用正则表达式,以下是几种常用的电子邮件正则表达式实现方式:

Java email正则表达式如何正确编写?-图1
(图片来源网络,侵删)

简单但有效的正则表达式

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class EmailValidator {
    private static final String EMAIL_REGEX = "^[A-Za-z0-9+_.-]+@(.+)$";
    private static final Pattern pattern = Pattern.compile(EMAIL_REGEX);
    public static boolean isValidEmail(String email) {
        if (email == null) return false;
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }
}

更严格的正则表达式(RFC 5322 标准)

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class EmailValidator {
    private static final String EMAIL_REGEX = "^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$";
    private static final Pattern pattern = Pattern.compile(EMAIL_REGEX);
    public static boolean isValidEmail(String email) {
        if (email == null) return false;
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }
}

使用 Java 8 的 javax.validation.constraints.Email

如果你使用的是 Java 8 或更高版本,可以使用内置的验证注解:

import javax.validation.constraints.Email;
import javax.validation.constraints.NotNull;
public class User {
    @NotNull
    @Email(message = "邮箱格式不正确")
    private String email;
    // getters and setters
}

使用 Apache Commons Validator 库

import org.apache.commons.validator.routines.EmailValidator;
public class EmailValidator {
    private static final EmailValidator emailValidator = EmailValidator.getInstance();
    public static boolean isValidEmail(String email) {
        return emailValidator.isValid(email);
    }
}

完整的示例代码

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class EmailValidator {
    // 更完整的正则表达式,符合大多数常见情况
    private static final String EMAIL_REGEX = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
    private static final Pattern pattern = Pattern.compile(EMAIL_REGEX);
    public static boolean isValidEmail(String email) {
        if (email == null || email.isEmpty()) {
            return false;
        }
        Matcher matcher = pattern.matcher(email);
        return matcher.matches();
    }
    public static void main(String[] args) {
        String[] testEmails = {
            "user@example.com",
            "user.name@example.com",
            "user-name@example.com",
            "user_name@example.com",
            "user+name@example.com",
            "user@sub.example.com",
            "invalid.email",
            "@example.com",
            "user@.com",
            "user@example.",
            "user@example..com"
        };
        for (String email : testEmails) {
            System.out.println(email + ": " + isValidEmail(email));
        }
    }
}

注意事项

  1. 完全符合 RFC 5322 标准的正则表达式会非常复杂,通常在实际应用中不需要那么严格
  2. 正则表达式可能无法覆盖所有有效的电子邮件地址,特别是那些包含非常规字符的地址
  3. 对于生产环境,建议结合简单的正则表达式和发送验证邮件的方式
  4. 考虑使用专门的验证库(如 Apache Commons Validator)而不是自己编写复杂的正则表达式

选择哪种方法取决于你的具体需求和项目环境,对于大多数应用场景,第二种或第四种方法提供了良好的平衡。

Java email正则表达式如何正确编写?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇