漆黑天使复活 2021-03-08 16:56 采纳率: 44.4%
浏览 82
已采纳

django form 验证邮箱后缀

我用django form的表单生产的注册界面

email = forms.EmailField(label='邮箱',
		widget=forms.EmailInput(attrs={'class':'form-control','placeholder':'请输入邮箱'}))

同时用form做邮箱验证邮箱是否已经注册,如下图,这个没问题

def clean_email(self):
		email = self.cleaned_data['email']	
		if User.objects.filter(email=email).exists():
			raise forms.ValidationError('邮箱已经被使用')	
		return email

同时我还想用form验证邮箱后缀是否为qq,如下图,但是就是不行,不是qq邮箱还是可以注册,怎么做邮箱后缀的验证?谢谢

def clean_qq_email(self):
		email = self.cleaned_data['email']
		if not '@qq' in email :
			raise forms.ValidationError('必须是用qq才可以注册')
		return email
  • 写回答

3条回答 默认 最新

  • 打杂的程序员 2021-03-08 17:15
    关注
    import re
    
    dict_email = {
        r'[1-9]\d{4,7}@qq\.com$': 'qq邮箱',
        r'[a-z1-9][a-z1-9_]{2,14}[a-z0-9]@sina\.com$': '新浪普通邮箱',
        r'1[3456789]\d{9}@sina\.cn$': '新浪手机邮箱',
        r'[a-zA-Z]\w{5,17}@163\.com$': '网易普通邮箱',
        r'[a-zA-Z][a-zA-Z0-9_.]{4,19}@vip\.163\.com$': '网易VIP邮箱'
        }  
    
    
    def check(addr):
        n = 1
        for pattern, email in dict_email.items():
            if re.match(pattern, addr):
                print(f'{addr}为{email}')
                break
            elif n == len(dict_email):
                print(f'{addr}不是邮箱账号')
            else:
                n += 1
    
    
    check('143379@qq.com')
    check('143379@qq\.com')
    check('a823456@sina.com')
    check('a823456@sina.comg')
    check('15187632190@sina.cn')
    check('05187632190@sina.cn')
    check('A123456789@163.com')
    check('123456789A@163.com')
    check('a._0a2b3c@vip.163.com')
    check('.a_0a2b3c@vip.163.com')
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 ssh登录页面的问题
  • ¥60 渗透一个指定银行app,拿到客户信息,需要什么级别
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥15 stm32 串口通讯过程中的问题
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问