[英]Regex password validation not working - javascript
我有下面的 javascript。 我正在嘗試制定密碼驗證規則以具有以下內容:
我能否獲得有關如何使大寫和特殊字符驗證起作用的指示?
// 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));
}))
}
})
}
});
字母和數字檢查應更新如下:
// Check if password contains at least 1 letter
if(/[a-z]/i.test(password)){
errors.push({ msg: 'Password should contain at least one letter' });
}
// Check if password contains at least 1 Uppercase letter
if(/[A-Z]/.test(password)){
errors.push({ msg: 'Password should contain at least one uppercase character' });
}
// Check if password contains at least 1 number
if(/[0-9]/.test(password)){
errors.push({ msg: 'Password should contain at least one number' });
}
在檢查表達式是否可以匹配字符串中的任何內容時,最好使用test
而不是search
,並且/[AZ]/i
不區分大小寫匹配任何字母。
PS 如果要檢查特殊字符,請參閱檢查字符串中的特殊字符。 有很多方法可以匹配 JavaScript 中的特殊字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.