Class DomainValidator

java.lang.Object
org.apache.commons.validator.routines.DomainValidator
All Implemented Interfaces:
Serializable

public class DomainValidator extends Object implements Serializable

Domain name validation routines.

This validator provides methods for validating Internet domain names and top-level domains.

Domain names are evaluated according to the standards RFC1034, section 3, and RFC1123, section 2.1. No accommodation is provided for the specialized needs of other applications; if the domain name has been URL-encoded, for example, validation will fail even though the equivalent plaintext version of the same name would have passed.

Validation is also provided for top-level domains (TLDs) as defined and maintained by the Internet Assigned Numbers Authority (IANA):

(NOTE: This class does not provide IP address lookup for domain names or methods to ensure that a given domain name matches a specific IP; see InetAddress for that functionality.)

Since:
Validator 1.4
Version:
$Revision: 1713225 $
See Also:
  • Field Details

    • EMPTY_STRING_ARRAY

      private static final String[] EMPTY_STRING_ARRAY
    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • DOMAIN_LABEL_REGEX

      private static final String DOMAIN_LABEL_REGEX
      See Also:
    • TOP_LABEL_REGEX

      private static final String TOP_LABEL_REGEX
      See Also:
    • DOMAIN_NAME_REGEX

      private static final String DOMAIN_NAME_REGEX
      See Also:
    • allowLocal

      private final boolean allowLocal
    • DOMAIN_VALIDATOR

      private static final DomainValidator DOMAIN_VALIDATOR
      Singleton instance of this validator, which doesn't consider local addresses as valid.
    • DOMAIN_VALIDATOR_WITH_LOCAL

      private static final DomainValidator DOMAIN_VALIDATOR_WITH_LOCAL
      Singleton instance of this validator, which does consider local addresses valid.
    • domainRegex

      private final RegexValidator domainRegex
      RegexValidator for matching domains.
    • hostnameRegex

      private final RegexValidator hostnameRegex
      RegexValidator for matching a local hostname
    • INFRASTRUCTURE_TLDS

      private static final String[] INFRASTRUCTURE_TLDS
    • GENERIC_TLDS

      private static final String[] GENERIC_TLDS
    • COUNTRY_CODE_TLDS

      private static final String[] COUNTRY_CODE_TLDS
    • LOCAL_TLDS

      private static final String[] LOCAL_TLDS
    • inUse

      private static boolean inUse
    • COUNTRY_CODE_TLDS_PLUS

      private static volatile String[] COUNTRY_CODE_TLDS_PLUS
    • GENERIC_TLDS_PLUS

      private static volatile String[] GENERIC_TLDS_PLUS
    • COUNTRY_CODE_TLDS_MINUS

      private static volatile String[] COUNTRY_CODE_TLDS_MINUS
    • GENERIC_TLDS_MINUS

      private static volatile String[] GENERIC_TLDS_MINUS
  • Constructor Details

    • DomainValidator

      private DomainValidator(boolean allowLocal)
      Private constructor.
  • Method Details

    • getInstance

      public static DomainValidator getInstance()
      Returns the singleton instance of this validator. It will not consider local addresses as valid.
      Returns:
      the singleton instance of this validator
    • getInstance

      public static DomainValidator getInstance(boolean allowLocal)
      Returns the singleton instance of this validator, with local validation as required.
      Parameters:
      allowLocal - Should local addresses be considered valid?
      Returns:
      the singleton instance of this validator
    • isValid

      public boolean isValid(String domain)
      Returns true if the specified String parses as a valid domain name with a recognized top-level domain. The parsing is case-insensitive.
      Parameters:
      domain - the parameter to check for domain name syntax
      Returns:
      true if the parameter is a valid domain name
    • isValidDomainSyntax

      final boolean isValidDomainSyntax(String domain)
    • isValidTld

      public boolean isValidTld(String tld)
      Returns true if the specified String matches any IANA-defined top-level domain. Leading dots are ignored if present. The search is case-insensitive.
      Parameters:
      tld - the parameter to check for TLD status, not null
      Returns:
      true if the parameter is a TLD
    • isValidInfrastructureTld

      public boolean isValidInfrastructureTld(String iTld)
      Returns true if the specified String matches any IANA-defined infrastructure top-level domain. Leading dots are ignored if present. The search is case-insensitive.
      Parameters:
      iTld - the parameter to check for infrastructure TLD status, not null
      Returns:
      true if the parameter is an infrastructure TLD
    • isValidGenericTld

      public boolean isValidGenericTld(String gTld)
      Returns true if the specified String matches any IANA-defined generic top-level domain. Leading dots are ignored if present. The search is case-insensitive.
      Parameters:
      gTld - the parameter to check for generic TLD status, not null
      Returns:
      true if the parameter is a generic TLD
    • isValidCountryCodeTld

      public boolean isValidCountryCodeTld(String ccTld)
      Returns true if the specified String matches any IANA-defined country code top-level domain. Leading dots are ignored if present. The search is case-insensitive.
      Parameters:
      ccTld - the parameter to check for country code TLD status, not null
      Returns:
      true if the parameter is a country code TLD
    • isValidLocalTld

      public boolean isValidLocalTld(String lTld)
      Returns true if the specified String matches any widely used "local" domains (localhost or localdomain). Leading dots are ignored if present. The search is case-insensitive.
      Parameters:
      lTld - the parameter to check for local TLD status, not null
      Returns:
      true if the parameter is an local TLD
    • chompLeadingDot

      private String chompLeadingDot(String str)
    • clearTLDOverrides

      static void clearTLDOverrides()
    • updateTLDOverride

      public static void updateTLDOverride(DomainValidator.ArrayType table, String[] tlds)
      Update one of the TLD override arrays. This must only be done at program startup, before any instances are accessed using getInstance.

      For example:

      DomainValidator.updateTLDOverride(ArrayType.GENERIC_PLUS, new String[]{"apache"})

      To clear an override array, provide an empty array.

      Parameters:
      table - the table to update, see
      invalid reference
      DomainValidator#ArrayType
      tlds - the array of TLDs, must not be null
      Throws:
      IllegalStateException - if the method is called after getInstance
      Since:
      1.5.0
    • unicodeToASCII

      static String unicodeToASCII(String input)
      Converts potentially Unicode input to punycode. If conversion fails, returns the original input.
      Parameters:
      input - the string to convert, not null
      Returns:
      converted input, or original input if conversion fails
    • isOnlyASCII

      private static boolean isOnlyASCII(String input)
    • arrayContains

      private static boolean arrayContains(String[] sortedArray, String key)
      Check if a sorted array contains the specified key
      Parameters:
      sortedArray - the array to search
      key - the key to find
      Returns:
      true if the array contains the key