package fr.openwide.core.commons.util.validator; import org.apache.commons.validator.routines.DomainValidator; import org.apache.commons.validator.routines.RegexValidator; import com.google.common.base.Predicate; import fr.openwide.core.commons.util.functional.SerializablePredicate; /** * A fixed DomainValidator that allows <em>any</em> TLD, and not only some hard-coded list, since allowed TLDs may vary over time. * <p>Regular expressions were taken from {@link DomainValidator} */ public final class AnyTldDomainValidator extends RegexValidator implements SerializablePredicate<String> { private static final long serialVersionUID = 6571374115899151352L; static final String DOMAIN_LABEL_REGEX = "[\\p{L}\\p{Digit}](?>[\\p{L}\\p{Digit}_-]*[\\p{L}\\p{Digit}])*"; static final String TOP_LABEL_REGEX = "\\p{Alpha}{2,}"; private static final String DOMAIN_NAME_REGEX = "^(?:" + DOMAIN_LABEL_REGEX + "\\.)+" + "(" + TOP_LABEL_REGEX + ")$"; private static final AnyTldDomainValidator INSTANCE = new AnyTldDomainValidator(); public static AnyTldDomainValidator getInstance() { return INSTANCE; } private AnyTldDomainValidator() { super(DOMAIN_NAME_REGEX); } /** * @deprecated Provided only to satisfy the {@link Predicate} interface; use * {@link #isValid(String)} instead. */ @Deprecated @Override public boolean apply(String input) { return isValid(input); } }