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 "authority" validator 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 AnyTldDomainAndPortValidator extends RegexValidator implements SerializablePredicate<String> { private static final long serialVersionUID = -8166436754268661547L; private static final String PORT_REGEX = "\\d+"; private static final String DOMAIN_NAME_AND_PORT_REGEX = "^(?:" + AnyTldDomainValidator.DOMAIN_LABEL_REGEX + "\\.)+" + "(" + AnyTldDomainValidator.TOP_LABEL_REGEX + ")" + "(\\:" + PORT_REGEX + ")?" + "$"; private static final AnyTldDomainAndPortValidator INSTANCE = new AnyTldDomainAndPortValidator(); public static AnyTldDomainAndPortValidator getInstance() { return INSTANCE; } private AnyTldDomainAndPortValidator() { super(DOMAIN_NAME_AND_PORT_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); } }