我正在一个MERN项目上工作,在用户登录时,我发现用户如下所示:
user.findone({username:req.body.username})。exec(函数(err,user){if(user){代码行。。。。});
假设我的用户名是Imran保存在Db中,并将上面代码中的username发送为。
案例1:req.body.username=Imran用户找到1
案例2:req.body.username=找到imran用户0
案例3:req.body.username=找到imRan用户0
如果我像这样使用正则表达式查找用户名。。。
user.findone({username:{$regex:username,$options:“i”}})
它将发现用户在所有上述情况,但如果我键入imr而不是Imran或Imran或Imran与密码给定它将再次登录该用户,这是不正确的!所以我希望。如果有人能帮我处理这件事的话!那会很棒的!
您可能希望在保存数据时通过调用username.ToLowerCase()
(或ToUPPerCase()
)对数据进行规范化。然后,在执行查询时,将调用user.findone({username:req.body.username.TolowerCase()})
谢谢大家的帮助!我找到了适合我的解决方案。user.findone({username:new RegExp(“\b”+username+“\b”,“i”)}。。。。这将匹配用户名字符串,无论它是小写还是大写。希望对您有帮助:)
我建议存储小写用户名,至少您要区分小写和大写用户名,如果这样,imran
和imran
是两个不同的用户。无论哪种方式,要匹配不区分大小写的查询,您都可以尝试如下所示:
User.findOne({username: /^imran$/i})
或
User.findOne({username: {$regex: '^imran$', $options: 'i'}})
在最后一个示例中,您将regex值作为字符串传递,以便在^
和$
之间包含一个变量,希望这会有所帮助。