我在寫一個註冊表單,只需要接受所需電子郵件地址的本地組件。域組件固定在該站點上。我試圖從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
爲什麼不正常驗證電子郵件,然後檢查email.endswith('@ domain.com')'? – Blender
用戶沒有輸入@ domain.com,它將在表單中的字段後面設置爲一個標籤。用戶只是輸入電子郵件字段的第一部分,在@ – DanH
之前這麼基本'''[^ @] *「'? –