繁体   English   中英

Joi Regex 未被识别为正则表达式模式

[英]Joi Regex is not recognized as Regex Pattern

我正在尝试为密码字段制定一个验证规则,它应该包含以下内容:

  • 必须有编号
  • 必须至少包含一个大写字母
  • 必须至少包含一个小写字母
  • 必须包含以下任何符号 [@$!]
  • 应仅包含 8 到 20 个字符。

这是我使用的正则表达式模式: (?=.*[az])(?=.*[AZ])(?=.*\d)(?=.*[$@$.#?])[A-Za-z\d$@$.%*,&.]{8,20}

https://regexr.com/上测试

这是 Joi 验证:

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

错误堆栈跟踪:

{ AssertionError [ERR_ASSERTION]: pattern must be a RegExp
    at internals.String.regex (E:\nodeprojects\voting-system\voting-server\node_modules\joi\lib\types\string\index.js:120:14)
    at Object.<anonymous> (E:\nodeprojects\voting-system\voting-server\src\routes\user.js:16:6)
    at Module._compile (module.js:649:30)
    at Object.Module._extensions..js (module.js:660:10)
    at Module.load (module.js:561:32)
    at tryModuleLoad (module.js:501:12)
    at Function.Module._load (module.js:493:3)
    at Module.require (module.js:593:17)
    at require (internal/module.js:11:18)
    at files.map (E:\nodeprojects\voting-system\voting-server\node_modules\hapi-auto-route\lib\auto-route.js:21:27)
    at Array.map (<anonymous>)
    at Object.module.exports.getRoutes (E:\nodeprojects\voting-system\voting-server\node_modules\hapi-auto-route\lib\auto-route.js:19:18)
    at Object.register (E:\nodeprojects\voting-system\voting-server\node_modules\hapi-auto-route\index.js:16:32)
    at <anonymous>
  generatedMessage: false,
  name: 'AssertionError [ERR_ASSERTION]',
  code: 'ERR_ASSERTION',
  actual: false,
  expected: true,
  operator: '==' }

我知道已经过去了大约 2 年,但我认为迟到总比不来好🤣🤣。

您只需要将模式放入RegExp()

这就是我编辑您的代码的方式:)

const pattern = "/(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[$@$!#.])[A-Za-zd$@$!%*?&.]{8,20}/";

password: Joi.string()
.regex(RegExp(pattern)) // you have to put it in this way and it will work :)
.required()
.min(8)
.max(20)

我希望它能帮助你!

正则表达式不需要字符串中的任何单引号(开始/结束)

这是一个工作正常的例子。

const joi = require("joi");

const strongPasswordRegex = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,}$/;
const stringPassswordError = new Error("Password must be strong. At least one upper case alphabet. At least one lower case alphabet. At least one digit. At least one special character. Minimum eight in length")

const schema = joi.object().keys({
    username: joi.string().required().min(4).max(15),
    password: joi.string().regex(strongPasswordRegex).error(stringPassswordError).required()
});

const notValid = schema.validate({ username: "MHamzaRajput", password: "Admin@admin123" }).error;

if (notValid) {
    console.log(notValid.message);
} else {
    console.log("payload validated successfully");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM