检查输入是否有空格并使用Express显示错误消息的最佳方法

时间:2018-02-12 13:06:43

标签: node.js express express-validator

我正在尝试验证用户名字段,并且我不想要字符串中的任何空格。我想向用户显示错误。

我正在使用express-validator express中间件来验证输入。它适用于其他所有情况,但我不知道验证没有空格的最佳方法。

https://www.npmjs.com/package/express-validator

我的代码

这就是我所拥有的,但目前有空格的用户名可以存储在数据库中。

check('user_name').isLength({ min: 1 }).trim().withMessage('User name is required.')

理想情况下,我可以使用快速验证方法。

谢谢。

3 个答案:

答案 0 :(得分:3)

trim仅适用于删除字符串周围的空格,但它在中间不起作用。

您可以轻松编写自定义验证器:

check('username')
  .custom(value => !/\s/.test(value))
  .withMessage('No spaces are allowed in the username')

自定义验证器使用正则表达式来检查是否存在任何空格字符(可能是通常的空格,制表符等),并取消结果,因为验证程序需要返回一个truthy值才能传递。

答案 1 :(得分:1)

另一种测试空间的方法:



console.log(/ /.test("string with spaces")) // true
console.log(/ /.test("string_without_spaces")) // false




还有另一种方式:



console.log("string with spaces".includes(" ")) // true
console.log("string_without_spaces".includes(" ")) // false




答案 2 :(得分:1)

当您在验证链中使用消毒剂时,它们仅在验证期间应用。

如果您想保留已清理的值,则应使用express-validator/filter中的清理功能:

app.post('/some/path', [
    check('user_name').isLength({ min: 1 }).trim().withMessage('User name is required.'),
    sanitize('user_name').trim()
], function (req, res) {
    // your sanitized user_name here
    let user_name = req.body.user_name
});

如果您想在不清理每个字段的情况下总是修剪所有请求主体,可以使用trim-request模块,这是一个示例:

const { check, validationResult } = require('express-validator/check');
const trimRequest = require('trim-request');

app.post('/some/path', trimRequest.body, [
    check('user_name').isLength({ min: 1 }).trim().withMessage('User name is required.'),
], function (req, res) {
    // your sanitized user_name here
    let user_name = req.body.user_name
});