code: def full_domain_validator(hostname):
      
      HOSTNAME_LABEL_PATTERN = re.compile("(?!-)[A-Z\d-]+(?<!-)$", re.IGNORECASE)
  
      if not hostname:
          return
      if len(hostname) > 255:
          raise ValidationError(_("The domain name cannot be composed of more than 255 characters."))
      if hostname[-1:] == ".":
          hostname = hostname[:-1]  # strip exactly one dot from the right, if present
      for label in hostname.split("."):
          if len(label) > 63:
              raise ValidationError(
                  _("The label '%(label)s' is too long (maximum is 63 characters).") % {'label': label})
          if not HOSTNAME_LABEL_PATTERN.match(label):
              raise ValidationError(_("Unallowed characters in label '%(label)s'.") % {'label': label})
docs: Fully validates a domain name as compilant with the standard rules:
          - Composed of series of labels concatenated with dots, as are all domain names.
          - Each label must be between 1 and 63 characters long.
          - The entire hostname (including the delimiting dots) has a maximum of 255 characters.
          - Only characters 'a' through 'z' (in a case-insensitive manner), the digits '0' through '9'.
          - Labels can't start or end with a hyphen.