validate method
GrxPostalCodeValidationResult
validate({
- required String input,
- required GrxPostalCodeRule rule,
- bool isRequired = false,
Implementation
GrxPostalCodeValidationResult validate({
required String input,
required GrxPostalCodeRule rule,
bool isRequired = false,
}) {
final trimmed = input.trim();
if (trimmed.isEmpty) {
if (isRequired) {
return GrxPostalCodeValidationResult.invalid(rule.hint ?? '');
}
return GrxPostalCodeValidationResult.valid;
}
final patterns = rule.effectivePatterns;
if (patterns.isEmpty) {
return GrxPostalCodeValidationResult.valid;
}
final normalized = rule.stripNonDigits
? trimmed.replaceAll(RegExp('[^0-9]'), '')
: trimmed;
for (final pattern in patterns) {
if (pattern.isEmpty) continue;
final regex = RegExp(pattern);
final match = regex.firstMatch(normalized);
if (match != null &&
match.start == 0 &&
match.end == normalized.length) {
return GrxPostalCodeValidationResult.valid;
}
}
if (!rule.stripNonDigits && RegExp('[^0-9]').hasMatch(trimmed)) {
final digitsOnly = trimmed.replaceAll(RegExp('[^0-9]'), '');
if (digitsOnly.isNotEmpty) {
for (final pattern in patterns) {
if (pattern.isEmpty) continue;
final regex = RegExp(pattern);
final match = regex.firstMatch(digitsOnly);
if (match != null &&
match.start == 0 &&
match.end == digitsOnly.length) {
return GrxPostalCodeValidationResult.valid;
}
}
}
}
return GrxPostalCodeValidationResult.invalid(rule.hint ?? '');
}