Node.js 使用正则表达式进行续集验证
我试图在用户模型中使用正则表达式来验证密码字段。但由于某些原因,它不起作用。我已经检查了sequelize文档,它说验证应该在Node.js 使用正则表达式进行续集验证,node.js,regex,postgresql,validation,sequelize.js,Node.js,Regex,Postgresql,Validation,Sequelize.js,我试图在用户模型中使用正则表达式来验证密码字段。但由于某些原因,它不起作用。我已经检查了sequelize文档,它说验证应该在创建、更新和保存上自动运行 我试过使用is和自定义验证器checkPassword。两者都没有返回任何错误。有人能解释一下我做错了什么吗 这是我的用户模型 从'../../utils/error'导入{CustomError}; module.exports=(sequelize,数据类型)=>{ const User=sequelize.define( “用户”, {
创建
、更新
和保存
上自动运行
我试过使用is
和自定义验证器checkPassword
。两者都没有返回任何错误。有人能解释一下我做错了什么吗
这是我的用户模型
从'../../utils/error'导入{CustomError};
module.exports=(sequelize,数据类型)=>{
const User=sequelize.define(
“用户”,
{
名字:DataTypes.STRING,
lastName:DataTypes.STRING,
电邮:{
allowNull:错,
独一无二:没错,
类型:DataTypes.STRING,
验证:{
isEmail:是的
}
},
密码:{
allowNull:错,
类型:DataTypes.STRING,
验证:{
检查密码(值){
如果(
!/^(?=.[a-z])(?=.[a-z])(?=.*\d)(?=.[#$^+=!*()@%&])。{8,}$/.测试(
价值
)
) {
抛出新的CustomError(400,“提供有效密码!”);
}
},
是:{
参数:/^(?=.[a-z])(?=.[a-z])(?=.*\d)(?=.[$^+=!*()@%&]){8,}$/,,
味精:
'密码必须至少包含8个字符,包括至少1个大写字母、1个小写字母和1个数字。'
}
}
}
},
{}
);
User.associate=功能(模型){
User.hasMany(models.Post{
外国人:是的,
foreignKey:'userId'
});
User.hasMany(models.Comment{
foreignKey:'userId',
foreignKeyConstraint:正确
});
};
返回用户;
}
好吧,我想出来了。验证不起作用的原因是因为我已经在对密码进行哈希运算,所以它正在传递验证规则。现在,我已经将验证移动到从用户处获取密码的位置 您可以使用下面的方法验证密码
validate: {
validatePassword: function(password) {
if(!(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,12}$/.test(password))) {
throw new Error('The password must contain at least 10 and maximum 12 characters including at least 1 uppercase, 1 lowercase, one number and one special character.');
}
}
},
这里有一个用于密码字符串检查的不同正则表达式