如何使用 joi 模式在 React js 中进行密码验证?

问题描述 投票:0回答:4

我想验证密码规则为: 密码长度应为 8 个字符,包含 1 个大写字母和 1 个小写字母、1 个数字和 1 个特殊字符。

password: new passwordComplexity({
      min: 8,
      max: 25,
      lowerCase: 1,
      upperCase: 1,
      numeric: 1,
      symbol: 1,
    }),
password: Joi.string()
  .min(8)
  .max(25)
  .required()
  .label("Password")
  .error((errors) => {
    errors.forEach((err) => {
      switch (err.type) {
        case "any.empty":
          err.message = passwordRequired;
          break;

        case "string.min":
          err.message = passwordInvalid;
          break;

        case "string.max":
          err.message = passwordInvalidMax;
          break;

        default:
      }
    });
    return errors;
  }),

我尝试了这些,但我猜密码复杂性仅适用于节点js。有这方面的帮助吗?

reactjs validation schema joi
4个回答
0
投票

谢谢您的帮助。但是,我找到了解决方案:

password: Joi.string()
      .min(8)
      .max(25)
      .regex(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/, 
      'password')

0
投票

您可以尝试使用正则表达式并传入模式

Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{3,30}$'))

有关如何使用正则表达式的更多信息:https://regexone.com/


0
投票
Joi.string()
.regex(/[ -~]*[a-z][ -~]*/) // at least 1 lower-case
.regex(/[ -~]*[A-Z][ -~]*/) // at least 1 upper-case
.regex(/[ -~]*(?=[ -~])[^0-9a-zA-Z][ -~]*/) // basically: [ -~] && [^0-9a-zA-Z], at least 1 special character
.regex(/[ -~]*[0-9][ -~]*/) // at least 1 number
.min(4)
.required()

什么是

[ -~]
(注意开头空格

它表示 ASCII 可打印字符 从 \x20 到 \x7E,其中 can 表示密码的所有可能输入,包括数字、字母和符号,控制字符除外。

如果你不明白第4行,你可以搜索Lookahead Assertion和Character Class Intersection(这个是针对java的,而不是javascript)。


0
投票

您可以将 Joi 与多个正则表达式一起使用,如下所示:

    Joi.string()
     .min(8)
     .regex(/[A-Z]/, 'upper-case')
     .regex(/[a-z]/, 'lower-case')
     .regex(/[^\w]/, 'special character')

够好了吗?

© www.soinside.com 2019 - 2024. All rights reserved.