Javascript 仅当电子邮件是电子邮件时才使用express validator清理电子邮件,否则忽略
我正在制作一个API,其中我将用户名和密码作为req.body,以便对用户进行身份验证。Javascript 仅当电子邮件是电子邮件时才使用express validator清理电子邮件,否则忽略,javascript,node.js,express,express-validator,Javascript,Node.js,Express,Express Validator,我正在制作一个API,其中我将用户名和密码作为req.body,以便对用户进行身份验证。 (简而言之,登录功能) 用户可以输入电子邮件、用户名或手机号码。在后端,我想规范化用户名,如果它是电子邮件。我这样做是因为我在注册时正在规范化电子邮件,因此我需要使用规范化电子邮件进行检查 想这样做:(一个简短的伪代码) 如果输入是用户名,上面的代码可以正常工作,但我也想规范化电子邮件 数据库内容如下所示 user : [ { username: 'SOME_MOBILE', passw
(简而言之,登录功能)
用户可以输入电子邮件、用户名或手机号码。在后端,我想规范化用户名,如果它是电子邮件。我这样做是因为我在注册时正在规范化电子邮件,因此我需要使用规范化电子邮件进行检查 想这样做:(一个简短的伪代码) 如果输入是用户名,上面的代码可以正常工作,但我也想规范化电子邮件 数据库内容如下所示
user : [
{
username: 'SOME_MOBILE',
password: 'SLDUS##$##KDJ'
},
{
username: 'SOME_EMAIL',
password: 'SLDU$%%##$2342423DJ'
},
{
username: 'my_username',
password: 'SLDUS##$#fssKDJ'
}
]
请帮忙谢谢您可以使用
@hapi/joi
软件包进行验证。
那么,试试这样的方法:
[body("username").notEmpty().escape().if(body("username").isEmail()).nomalizeEmail(),
body("password").notEmpty().escape()]
const schema=Joi.object().keys({
用户名:Joi.string().required(),
电子邮件:Joi.string().email().required()
});
完整样本:
// Login user
router.post(
"/login",
[
check("username").not().isEmpty().escape(),
check("password").not().isEmpty().escape(),
],
(req, res, next) => {
// Finds validation errors and return error object
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
let { username, password } = req.body;
// Do authentication part
}
);
const-Joi=require('@hapi/Joi');
const schema=Joi.object().keys({
用户名:Joi.string().required(),
电子邮件:Joi.string().email().required()
});
让username='Roger Brown';
让我们发电子邮件吧roger@example';
让数据={用户名,电子邮件};
Joi.validate(数据、模式、(错误、值)=>{
如果(错误){
控制台日志(错误详细信息);
}否则{
console.log(值);
}
});
如果您不使用任何第三方软件包,请使用regex
如下:
[body("username").notEmpty().escape().if(body("username").isEmail()).nomalizeEmail(),
body("password").notEmpty().escape()]
功能验证电子邮件(电子邮件){
常量re=/^([^()\[\]\\,;:\s@“]+(\.[^()\[\]\,;:\s@“]+)*)(“+”)(\[[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[1,3}.[0-9]{1,3}.]124;([a-zA Z-0-9]++];
返回re.test(字符串(email.toLowerCase());
}
如果您想将您的用户名
作为电子邮件检查,如下所示:
[body("username").notEmpty().escape().if(body("username").isEmail()).nomalizeEmail(),
body("password").notEmpty().escape()]
很抱歉但我不允许使用除express validator之外的任何其他软件包。请尝试建议我使用此软件包。它也没有澄清我的疑问,我使用用户名或密码,使用正则表达式,如我添加到答案中的正则表达式。这将验证我的电子邮件,但不会对其进行清理(我也要清理)。我希望用户名为电子邮件或普通用户名,但如果我使用您的解决方案,如果我改为提供用户名,它会给出错误响应。现在刚刚编辑了帖子。如果是电子邮件或非抱歉,您的“用户名”字段将被清除!在理解消毒和正常化之间存在错误。实际上,我想规范电子邮件。请重新检查编辑过的问题。编辑的部分是斜体字!非常感谢你,伙计。它成功了,非常感谢。