validate method
Validates and normalizes an email.
Implementation
ValidationResult<EmailValidationIssue, String> validate(String input) {
final trimmed = input.trim();
if (trimmed.isEmpty) {
return const Left(EmailEmptyIssue());
}
if (trimmed.length > config.maxLength) {
return Left(
EmailTooLongIssue(
currentLength: trimmed.length,
maxLength: config.maxLength,
),
);
}
if (!emailReg.hasMatch(trimmed)) {
return const Left(EmailInvalidFormatIssue());
}
final parts = trimmed.split('@');
if (parts.length != 2) {
return const Left(EmailInvalidFormatIssue());
}
final localPart = parts[0];
final domain = parts[1];
if (localPart.length > config.maxLocalPartLength) {
return Left(
EmailLocalPartTooLongIssue(
currentLength: localPart.length,
maxLength: config.maxLocalPartLength,
),
);
}
if (domain.length > config.maxDomainLength) {
return Left(
EmailDomainTooLongIssue(
currentLength: domain.length,
maxLength: config.maxDomainLength,
),
);
}
final lowerDomain = domain.toLowerCase();
if (config.blockedDomains.contains(lowerDomain)) {
return Left(EmailBlockedDomainIssue(lowerDomain));
}
if (!config.allowDisposable &&
config.disposableDomains.contains(lowerDomain)) {
return Left(EmailDisposableDomainIssue(lowerDomain));
}
return Right(trimmed.toLowerCase());
}