Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 仅当电子邮件是电子邮件时才使用express validator清理电子邮件,否则忽略_Javascript_Node.js_Express_Express Validator - Fatal编程技术网

Javascript 仅当电子邮件是电子邮件时才使用express validator清理电子邮件,否则忽略

Javascript 仅当电子邮件是电子邮件时才使用express validator清理电子邮件,否则忽略,javascript,node.js,express,express-validator,Javascript,Node.js,Express,Express Validator,我正在制作一个API,其中我将用户名和密码作为req.body,以便对用户进行身份验证。 (简而言之,登录功能) 用户可以输入电子邮件、用户名或手机号码。在后端,我想规范化用户名,如果它是电子邮件。我这样做是因为我在注册时正在规范化电子邮件,因此我需要使用规范化电子邮件进行检查 想这样做:(一个简短的伪代码) 如果输入是用户名,上面的代码可以正常工作,但我也想规范化电子邮件 数据库内容如下所示 user : [ { username: 'SOME_MOBILE', passw

我正在制作一个API,其中我将用户名和密码作为req.body,以便对用户进行身份验证。
(简而言之,登录功能)
用户可以输入电子邮件、用户名或手机号码。在后端,我想规范化用户名,如果它是电子邮件。我这样做是因为我在注册时正在规范化电子邮件,因此我需要使用规范化电子邮件进行检查

想这样做:(一个简短的伪代码)

如果输入是用户名,上面的代码可以正常工作,但我也想规范化电子邮件

数据库内容如下所示

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之外的任何其他软件包。请尝试建议我使用此软件包。它也没有澄清我的疑问,我使用用户名或密码,使用正则表达式,如我添加到答案中的正则表达式。这将验证我的电子邮件,但不会对其进行清理(我也要清理)。我希望用户名为电子邮件或普通用户名,但如果我使用您的解决方案,如果我改为提供用户名,它会给出错误响应。现在刚刚编辑了帖子。如果是电子邮件或非抱歉,您的“用户名”字段将被清除!在理解消毒和正常化之间存在错误。实际上,我想规范电子邮件。请重新检查编辑过的问题。编辑的部分是斜体字!非常感谢你,伙计。它成功了,非常感谢。