【问题标题】:How to set custom message for regex in joi如何在 joi 中为正则表达式设置自定义消息
【发布时间】:2020-08-28 19:05:31
【问题描述】:

当我验证我的 graphql 参数时,我在密码字段中收到类似这样的错误消息。

"password" with value "" fails to match the required pattern: /^(?=\\S*[a-z])(?=\\S*[A-Z])(?=\\S*\\d)(?=\\S*[^\\w\\s])\\S{8,30}$/"

我不想在错误消息中显示正则表达式模式。所以我尝试为密码字段设置自定义错误消息,但它仍然显示正则表达式模式。

import Joi from "joi";

export default Joi.object().keys({
  email: Joi.string().email().required().label("Email"),
  username: Joi.string().alphanum().min(4).max(20).required().label("Username"),
  name: Joi.string().min(4).max(256).required().label("Name"),
  password: Joi.string()
    .min(8)
    .regex(/^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,30}$/)
    .required()
    .label("Password")
    .messages({
      "string.min": "Must have at least 8 characters",
      "object.regex": "Must have at least 8 characters",
    }),
});

我认为它不是通过object.regex 选择正则表达式。请帮忙。

【问题讨论】:

    标签: error-handling graphql joi


    【解决方案1】:

    要知道抛出了什么错误,您可以调试错误对象(通过记录它),然后找到错误的type

    例子:

    const Joi = require('@hapi/joi');
    
    const joiSchema = Joi.object().keys({
      password: Joi.string()
        .min(8)
        .regex(/^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*\d)(?=\S*[^\w\s])\S{8,30}$/)
        .required()
        .label("Password")
        .messages({
          "string.min": "Must have at least 8 characters",
          "object.regex": "Must have at least 8 characters",
          "string.pattern.base": "enter your custom error here..."
        })
    });
    
    const validationResult = joiSchema.validate({ password: "2" }, { abortEarly: false });
    console.log(validationResult.error.details.map(errDetail => errDetail.type), validationResult.error);
    

    这会输出["string.min", "string.pattern.base"]details 因 string.min 和 string.pattern.base 有 2 个错误,abortEarly 设置为 false。

    【讨论】:

    • 这总是显示 string.pattern.base 即使数据已经有效。
    猜你喜欢
    • 2020-02-12
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 2019-03-21
    • 2017-02-05
    • 2021-07-04
    相关资源
    最近更新 更多