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

简单但有效的正则表达式
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));
}
}
}
注意事项
- 完全符合 RFC 5322 标准的正则表达式会非常复杂,通常在实际应用中不需要那么严格
- 正则表达式可能无法覆盖所有有效的电子邮件地址,特别是那些包含非常规字符的地址
- 对于生产环境,建议结合简单的正则表达式和发送验证邮件的方式
- 考虑使用专门的验证库(如 Apache Commons Validator)而不是自己编写复杂的正则表达式
选择哪种方法取决于你的具体需求和项目环境,对于大多数应用场景,第二种或第四种方法提供了良好的平衡。

