【发布时间】:2021-03-24 17:31:19
【问题描述】:
我有下面的javascript。我正在尝试制定密码验证规则以具有以下内容:
- 至少 12 个字符长(有效)
- 至少 1 封信(有效)
- 至少 1 个大写字母(无效)
- 至少 1 位数字(有效)
- 至少 1 个特殊字符(无效)
能否请我指点一下如何使大写和特殊字符验证正常工作?
// Register Handle
router.post('/register', (req, res) => {
const { name, email, password, password2, userType } = req.body;
let errors = [];
// Check required fields
if(!name || !email || !password || !password2 || !userType){
errors.push({ msg: 'Please fill in all fields'})
}
// Check if passwords match
if(password !== password2) {
errors.push({ msg: 'Passwords do not match' });
}
// Check password length
if(password.length < 12) {
errors.push({ msg: 'Password should be at least 12 characters long' });
}
// Check if password contains at least 1 letter
if(password.search(/[a-z]/i) < 0){
errors.push({ msg: 'Password should contain at least one letter' });
}
// Check if password contains at least 1 Uppercase letter
if(password.search(/[A-Z]/i) < 0){
errors.push({ msg: 'Password should contain at least one uppercase character' });
}
// Check if password contains at least 1 number
if(password.search(/[0-9]/) < 0){
errors.push({ msg: 'Password should contain at least one number' });
}
// Check if password contains at least 1 special character
if(password.search() < 0){
errors.push({ msg: 'Password should contain at least one number' });
}
if(errors.length > 0) {
res.render('register', {
errors,
name,
email,
password,
password2,
userType
})
} else {
// Passed Validation
User.findOne({ email: email })
.then(user => {
if(user) {
// User exists
errors.push({ msg: 'Email already registered' });
res.render('register', {
errors,
name,
email,
password,
password2,
userType
})
} else {
const newUser = new User({
name,
email,
password,
userType
});
// Hash Password
bcrypt.genSalt(10, (err, salt) => bcrypt.hash(newUser.password, salt, (err, hash) =>{
if(err) throw err;
// Sets password to hash
newUser.password = hash;
// Save user
newUser.save()
.then(user => {
req.flash('success_msg', 'Registration successful! Login to continue')
res.redirect('/auth/login')
return;
})
.catch(err => console.log(err));
}))
}
})
}
});
【问题讨论】:
-
从信件检查中删除
i标志。当您专门检查大小写时,它使正则表达式不区分大小写,这没有意义。 -
谢谢!那行得通。你知道我如何对特殊字符进行验证吗?
-
/\W/匹配任何非字母数字字符。 this fiddle 你也可能受益,我为另一个有点类似的问题做了它。
标签: javascript html node.js regex security