希望するメールアドレスのローカルコンポーネントのみを受け入れる必要がある登録フォームを作成しています。ドメインコンポーネントはサイトに固定されています。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:したがって、フォームフィールドとラベルは次のようになります。
希望のメールアドレス:[--- type-able area ---] @ domain.com