Django模型中RegexValidator无法正确校验指定格式邮箱的问题求助
问题解决:Django邮箱正则验证失效修正
你的正则表达式存在两个核心问题,导致错误格式的邮箱也能通过验证:
- 末尾的
[nith.ac.in]*是字符集匹配(方括号内的任意单个字符),加上*表示允许这些字符重复0次或多次,所以不管是.in还是in都会被匹配,甚至其他乱序组合也能通过。 - 没有用
$锚定字符串结尾,无法强制邮箱必须以指定域名结束。
修正后的代码
email = models.EmailField( unique=True, validators=[ RegexValidator( regex=r"^22[a-zA-Z]{3}\d{3}@nith\.ac\.in$", message="Only freshers with college email addresses are authorised." ) ], )
关键修改说明
- 精确匹配域名:把
[nith.ac.in]*替换为nith\.ac\.in$\.用来转义正则中的特殊字符.(否则.会匹配任意单个字符)$锚定字符串结尾,确保邮箱必须严格以@nith.ac.in结束,拒绝@nith.acin这类错误格式。
- 简化用户名匹配:把
[2][2]简化为22,功能完全一致,代码更简洁。
内容的提问来源于stack exchange,提问作者Mehul Aggarwal
相关产品推荐
相关产品推荐

