我正在编写一个注册表单,只需要接受所需电子邮件地址的本地组件。域组件固定到站点。我试图通过有选择地复制validators.validate_email
Django 提供的内容来验证它EmailField
:
email_re = re.compile(
r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom
# quoted-string, see also http://tools.ietf.org/html/rfc2822#section-3.2.5
r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-\011\013\014\016-\177])*"'
r')@((?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?$)' # domain
r'|\[(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}\]$', re.IGNORECASE) # literal form, ipv4 address (SMTP 4.1.3)
validate_email = EmailValidator(email_re, _(u'Enter a valid e-mail address.'), 'invalid')
以下是我的代码。我的主要问题是我无法调整正则表达式。在这一点上,我只是在http://www.pythonregex.com/的正则表达式测试器中对其进行测试,但是它失败了:
^([-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*)$
这似乎传递了不受欢迎的字符,例如?
我的领域的整个代码,在这个阶段不一定相关,但我不介意对此发表评论:
class LocalEmailField(CharField):
email_local_re = re.compile(r"^([-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*)$", re.IGNORECASE)
validate_email_local = RegexValidator(email_re, (u'Enter a valid e-mail username.'), 'invalid')
default_validators = [validate_email_local]
编辑:为了澄清,用户只在 之前输入文本@
,因此我不需要在验证@domain.com
器中验证 。
编辑 2:所以表单字段和标签将如下所示:
所需的电子邮件地址:[---可输入区域---]@domain.com