import re from django.core.exceptions import ValidationError from django.core.validators import RegexValidator def validate_lower(value): if value != value.lower(): raise ValidationError('Invalid value (not lowercase): %(value)s', code='invalid', params={'value': value}) def validate_upper(value): if value != value.upper(): raise ValidationError('Invalid value (not uppercase): %(value)s', code='invalid', params={'value': value}) validate_domain_name = [ validate_lower, RegexValidator( regex=r'^(([a-z0-9_-]{1,63})\.)*[a-z0-9-]{1,63}$', message='Domain names must be labels separated by dots. Labels may consist of up to 63 letters, digits, ' 'hyphens, and underscores. The last label may not contain an underscore.', code='invalid_domain_name', flags=re.IGNORECASE ) ]