【问题标题】:JOI validation string fails on , andJOI 验证字符串在 , 和
【发布时间】:2018-06-01 02:03:10
【问题描述】:

我使用joi 进行验证,并尝试通过以下方式验证 cmets textarea 内容:

const schema = Joi.object().keys({
    firstName: Joi.string().alphanum().min(3).max(30).required(),
    lastName: Joi.string().alphanum().min(3).max(30).required(),
    company: Joi.string().alphanum().min(3).max(30).required(),
    comments: Joi.string().alphanum().min(30).max(1500).required(),
    email: Joi.string().email().required()
});

但是,如果有人输入逗号或句号,验证将失败。如何将这些异常添加到验证中?

【问题讨论】:

    标签: javascript node.js validation joi


    【解决方案1】:

    由于您可能希望允许人们在 cmets 字段中进行任何操作,因此我将简单地省略 alphanum 以进行 cmets 验证,如下所示:

    const schema = Joi.object().keys({
        firstName: Joi.string().alphanum().min(3).max(30).required(),
        lastName: Joi.string().alphanum().min(3).max(30).required(),
        company: Joi.string().alphanum().min(3).max(30).required(),
    
        // note: no alphanum here
        comments: Joi.string().min(30).max(1500).required(),
    
        email: Joi.string().email().required()
    }); 
    

    如果您真的必须有只包含字母、数字、逗号和句点的 cmets,您可以诉诸使用 regex 规则:

    const schema = Joi.object().keys({
        // ...
        comments: Joi.string().regex(/^[,. a-z0-9]+$/).required(),
        // ...
    }); 
    

    【讨论】:

      【解决方案2】:

      您可以使用包含字母数字字符和逗号的正则表达式。我不知道你说的 fullstop 是什么意思。

      Joi.string().regex(/^[a-zA-Z0-9, ]*$/, 'Alphanumerics, space and comma characters').min(3).max(30).required()
      

      请注意,这只会匹配 a-z、A-Z、0-9 范围内的字符以及空格和逗号字符。您还需要添加任何其他内容(例如句点字符、方括号、圆括号?)。

      来源是Joi API docs

      【讨论】:

        【解决方案3】:

        您可以简单地使用正则表达式语法 comments: Joi.string().regex(/^[a-zA-Z0-9,. ]*$/).min(3).max(30).required()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-20
          • 1970-01-01
          • 2017-01-29
          • 1970-01-01
          • 2019-10-16
          • 2018-10-13
          • 2019-04-16
          • 2022-11-12
          相关资源
          最近更新 更多