import java.util.Objects;
public final class EmailValidator {
public static final class ValidationResult {
private final boolean isValid;
private final String errorMessage;
private ValidationResult(boolean isValid, String errorMessage) {
this.isValid = isValid;
this.errorMessage = errorMessage;
}
public static ValidationResult success() {
return new ValidationResult(true, null);
}
public static ValidationResult error(String message) {
return new ValidationResult(false, message);
}
public boolean isValid() { return isValid; }
public String errorMessage() { return errorMessage; }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ValidationResult that = (ValidationResult) o;
return isValid == that.isValid &&
Objects.equals(errorMessage, that.errorMessage);
}
@Override
public int hashCode() {
return Objects.hash(isValid, errorMessage);
}
}
public static ValidationResult validate(String email) {
if (email == null || email.trim().isEmpty()) {
return ValidationResult.error("Email не может быть пустым");
}
String[] parts = email.split("@", -1); // -1 сохраняет пустые части
if (parts.length != 2) {
return ValidationResult.error("Email должен содержать ровно один символ '@'");
}
String local = parts[0];
String domain = parts[1];
if (local.isEmpty()) {
return ValidationResult.error("Локальная часть email не может быть пустой");
}
if (domain.isEmpty() || !domain.contains(".") ||
domain.startsWith(".") || domain.endsWith(".")) {
return ValidationResult.error("Некорректный домен: должен содержать точку и не начинаться/заканчиваться ею");
}
return ValidationResult.success();
}
}
import java.util.Objects;
public final class EmailValidator {
public static final class ValidationResult {
private final boolean isValid;
private final String errorMessage;
private ValidationResult(boolean isValid, String errorMessage) {
this.isValid = isValid;
this.errorMessage = errorMessage;
}
public static ValidationResult success() {
return new ValidationResult(true, null);
}
public static ValidationResult error(String message) {
return new ValidationResult(false, message);
}
public boolean isValid() { return isValid; }
public String errorMessage() { return errorMessage; }
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ValidationResult that = (ValidationResult) o;
return isValid == that.isValid &&
Objects.equals(errorMessage, that.errorMessage);
}
@Override
public int hashCode() {
return Objects.hash(isValid, errorMessage);
}
}
public static ValidationResult validate(String email) {
if (email == null || email.trim().isEmpty()) {
return ValidationResult.error("Email не может быть пустым");
}
String[] parts = email.split("@", -1); // -1 сохраняет пустые части
if (parts.length != 2) {
return ValidationResult.error("Email должен содержать ровно один символ '@'");
}
String local = parts[0];
String domain = parts[1];
if (local.isEmpty()) {
return ValidationResult.error("Локальная часть email не может быть пустой");
}
if (domain.isEmpty() || !domain.contains(".") ||
domain.startsWith(".") || domain.endsWith(".")) {
return ValidationResult.error("Некорректный домен: должен содержать точку и не начинаться/заканчиваться ею");
}
return ValidationResult.success();
}
}