检查django / python中电子邮件的有效性 [英] Checking validity of email in django/python
问题描述
我已经写了一个功能来添加电子邮件到通讯基地。在我添加发送电子邮件的有效性之前,它是完美无缺的。现在每次我收到错误的电子邮件作为回报。任何人都可以看到任何错误?所使用的正则表达式是:
I have written a function for adding emails to newsletter base. Until I've added checking validity of sent email it was working flawlessly. Now each time I'm getting "Wrong email" in return. Can anybody see any errors here ? The regex used is :
\b [\w\ .-] + @ [\w\ .-] + \.\w {2,4} \b
,它是100%有效( http://gskinner.com/RegExr/ ),但是我可能使用它错了,或者可能是一些逻辑错误:
\b[\w\.-]+@[\w\.-]+\.\w{2,4}\b
and it is 100% valid (http://gskinner.com/RegExr/), but I may be using it wrong, or it may be some logic error :
def newsletter_add(request):
if request.method == "POST":
try:
e = NewsletterEmails.objects.get(email = request.POST['email'])
message = _(u"Email is already added.")
type = "error"
except NewsletterEmails.DoesNotExist:
if validateEmail(request.POST['email']):
try:
e = NewsletterEmails(email = request.POST['email'])
except DoesNotExist:
pass
message = _(u"Email added.")
type = "success"
e.save()
else:
message = _(u"Wrong email")
type = "error"
import re
def validateEmail(email):
if len(email) > 6:
if re.match('\b[\w\.-]+@[\w\.-]+\.\w{2,4}\b', email) != None:
return 1
return 0
推荐答案
这是django.core.validators的一部分,您可能会发现有趣的:)
Here is part of django.core.validators you may find interesting :)
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')
所以如果你不想使用表单和表单字段,可以导入 email_re
并在您的函数中使用它,甚至更好 - 导入 validate_email
并使用它,捕捉可能 ValidationError
。
so if you don't want to use forms and form fields, you can import email_re
and use it in your function, or even better - import validate_email
and use it, catching possible ValidationError
.
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
这里是 Mail :: RFC822 :: Address regexp 用于PERL,如果你真的需要这样的偏执。
And here is Mail::RFC822::Address regexp used in PERL, if you really need to be that paranoid.
这篇关于检查django / python中电子邮件的有效性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!