<blockquote>
<p><strong>UPDATE 2017</strong>: the code below is 7 years old and was since modified, fixed and expanded. For anyone wishing to do this now, the correct code lives around here: <a href="https://github.com/django/django/blob/master/django/core/validators.py#L168-L180" rel="noreferrer">https://github.com/django/django/blob/master/django/core/validators.py#L168-L180</a></p>
</blockquote>
<p>这是django.core.validators的一部分,您可能会发现它很有趣:)</p>
<pre><code>class EmailValidator(RegexValidator):
def __call__(self, value):
try:
super(EmailValidator, self).__call__(value)
except ValidationError, e:
# Trivial case failed. Try for possible IDN domain-part
if value and u'@' in value:
parts = value.split(u'@')
domain_part = parts[-1]
try:
parts[-1] = parts[-1].encode('idna')
except UnicodeError:
raise e
super(EmailValidator, self).__call__(u'@'.join(parts))
else:
raise
email_re = re.compile(
r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom
r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string
r')@(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?$', re.IGNORECASE) # domain
validate_email = EmailValidator(email_re, _(u'Enter a valid e-mail address.'), 'invalid')
</code></pre>
<p>因此,如果不想使用表单和表单域,可以导入<code>email_re</code>并在函数中使用它,或者更好的方法是导入<code>validate_email</code>并使用它,捕获可能的<code>ValidationError</code>。</p>
<pre><code>def validateEmail( email ):
from django.core.validators import validate_email
from django.core.exceptions import ValidationError
try:
validate_email( email )
return True
except ValidationError:
return False
</code></pre>
<p>这里是PERL中使用的<a href="http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html" rel="noreferrer">Mail::RFC822::Address regexp</a>,如果您真的需要那么多疑的话。</p>