Python 带有iregex的Django queryset筛选器返回所有对象,即使筛选器条件不匹配

Python 带有iregex的Django queryset筛选器返回所有对象,即使筛选器条件不匹配,python,django,django-models,Python,Django,Django Models,我需要查询数据库,以获得基于电子邮件不区分大小写的正则表达式搜索的用户列表 User.objects.filter(email_uu-iregex=f'({“|”.join(emails)})” 这里的电子邮件是一个包含用户电子邮件ID的列表。当电子邮件为空列表时,上面返回数据库中的所有用户。我不明白为什么会发生这种事?理想情况下,当电子邮件为空列表时,应返回空查询集。有人能告诉我上面的代码有什么问题吗。这是完全正常的,因为正则表达式没有开始/开始锚点,因此空正则表达式匹配所有内容。您可以添加

我需要查询数据库,以获得基于电子邮件不区分大小写的正则表达式搜索的用户列表

User.objects.filter(email_uu-iregex=f'({“|”.join(emails)})”

这里的电子邮件是一个包含用户电子邮件ID的列表。当电子邮件为空列表时,上面返回数据库中的所有用户。我不明白为什么会发生这种事?理想情况下,当电子邮件为空列表时,应返回空查询集。有人能告诉我上面的代码有什么问题吗。

这是完全正常的,因为正则表达式没有开始/开始锚点,因此空正则表达式匹配所有内容。您可以添加锚点
^
(起始锚点)和
$
(结束锚点),如下所示:


这是完全正常的,因为正则表达式没有begin/start锚,因此空正则表达式匹配所有内容。
User.objects.filter(email__iregex=f'^({'|'.join(emails)})$')
from re import escape as rescape

escaped_emails = '|'.join(map(rescape, emails))
User.objects.filter(email__iregex=f'^({escaped_emails})$')