원하는 전자 메일 주소의 로컬 구성 요소 만 받아 들일 필요가있는 등록 양식을 작성하고 있습니다. 도메인 구성 요소가 사이트에 고정됩니다. 나는 선택적으로 EmailField
에 대한 장고가 제공하는 validators.validate_email
에서 복사하여 검증을 시도하고있다 : 전자 메일 로컬 구성 요소 유효성 검사
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
앞에 기본적으로 이메일 필드의 첫 부분 만 입력하면됩니다. [^ @] * "'? –