ADD - DateValidator and PhoneNumberValidator

This commit is contained in:
atravieso 2025-04-01 14:33:39 -04:00
parent a0675ad7f1
commit c36f2dccb5
2 changed files with 107 additions and 0 deletions

View File

@ -0,0 +1,82 @@
package com.banesco.infraestructure.utils;
import java.time.DateTimeException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.regex.Pattern;
public class DateValidator {
private final DateTimeFormatter dateFormatter;
private final Pattern datePattern;
private final int minYear;
private final int maxYear;
private DateValidator(Builder builder) {
this.dateFormatter = builder.dateFormatter;
this.datePattern = Pattern.compile(builder.dateFormatRegex);
this.minYear = builder.minYear;
this.maxYear = builder.maxYear;
}
public static class Builder {
private DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
private String dateFormatRegex = "(\\d{4})/(0[1-9]|1[0-2])/(0[1-9]|[12][0-9]|3[01])";
private int minYear = 1900;
private int maxYear = 2100;
public Builder withDateFormatter(String dateFormatterPattern) {
this.dateFormatter = DateTimeFormatter.ofPattern(dateFormatterPattern);
return this;
}
public Builder withDateFormatRegex(String dateFormatRegex) {
this.dateFormatRegex = dateFormatRegex;
return this;
}
public Builder withMinYear(int minYear) {
this.minYear = minYear;
return this;
}
public Builder withMaxYear(int maxYear) {
this.maxYear = maxYear;
return this;
}
public DateValidator build() {
return new DateValidator(this);
}
}
public boolean isValidDateFormat(String date) {
return date != null && datePattern.matcher(date).matches();
}
public boolean isValidDate(String date) {
if (!isValidDateFormat(date)) {
return false;
}
try {
LocalDate parsedDate = LocalDate.parse(date, dateFormatter);
String formattedDate = parsedDate.format(dateFormatter);
return date.equals(formattedDate);
} catch (DateTimeException e) {
return false;
}
}
public boolean isValidDate(int year, int month, int day) {
return year >= minYear && year <= maxYear && month >= 1 && month <= 12 && isValidDayOfMonth(year, month, day);
}
private boolean isValidDayOfMonth(int year, int month, int day) {
try {
LocalDate.of(year, month, day);
return true;
} catch (DateTimeException e) {
return false;
}
}
}

View File

@ -0,0 +1,25 @@
package com.banesco.infraestructure.utils;
import java.util.regex.Pattern;
public class PhoneNumberValidator {
private final Pattern pattern;
public PhoneNumberValidator(String phonePattern) {
pattern = Pattern.compile(phonePattern);
}
/**
* Validates the phone number format.
*
* @param phoneNumber the phone number to validate.
* @return true if the phone number is valid, false otherwise.
*/
public boolean isValid(String phoneNumber) {
if (phoneNumber == null) {
return false;
}
return pattern.matcher(phoneNumber).matches();
}
}