1

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

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

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

我的代码

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

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

理想情况下,我可以使用 express-validator 方法。

谢谢你。

4

3 回答 3

6

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

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

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

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

于 2018-02-12T22:11:35.683 回答
2

另一种测试空间的方法:

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

于 2018-02-12T13:38:21.260 回答
1

发生的情况是:当您在验证链中使用消毒剂时,它们仅在验证期间应用。

如果您想保留已清理的值,则应使用以下 sanitize 函数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
});
于 2018-02-12T15:27:57.653 回答