[英]Why does if conditional statement terminate after else if(which is false)although there is another else if in this if conditional statement?
我在nodejs中編寫了這段代碼:
let letters = /^[A-Za-z]+$/;
let letter2 = /^[a-z_]+$/;
const registerChecker = async(firstName,lastName,username, email, password, password2) =>{
let errors = []
// Check required fields
if(!firstName||!lastName||!username|| !email|| !password || !password2){
errors.push({msg:'Please fill all fields'})
}else if(!firstName.match(letters)){
errors.push({msg:'Firstname must contain only Latin lowercase and uppercase letters("a"-"z")("A"-"Z")'})
}else if(!lastName.match(letters)){
errors.push({msg:'Lastname must contain only Latin lowercase and uppercase letters("a"-"z")("A"-"Z")'})
}else if(username){
if(!username.match(letter2)){
errors.push({msg:"Username must contain only lowercase Latin letters ('a' - 'z'), numbers, and underscores ('_')"})
}
}else if(password.length<6){
console.log('Less than 6')
// Password length
errors.push({msg:'Password must be at least 7 characters'})
}else if(password2 !== password){
// Matching Password
errors.push({msg:'Password do not match'})
}
return errors
}
registerChecker('firstname','lastname','user_me','hello@gmail.com','pass','fs').then(s=>console.log(s)).catch(er=>console.log(er))
當我運行此代碼時,它一直工作到(else if(password.length<6))完美。 但是 this (else if(password.length<6)) else if 和 under it 根本不起作用。 我應該怎么做才能正確編寫此代碼?
條件if(username)
將始終為真。 如果它不是真的,那么第一個語句將失敗並且永遠不會到達這里。 你可以省略這個,直接寫if(password.length<6){}
那么你的問題就解決了。
對於您的代碼, error
將為空。
如果其他,請找到正確的整個偽代碼。
if(!firstName||!lastName||!username|| !email|| !password || !password2){
errors.push({msg:'Please fill all fields'})
}else if(!firstName.match(letters)){
errors.push({msg:'Firstname must contain only Latin lowercase and uppercase letters("a"-"z")("A"-"Z")'})
}else if(!lastName.match(letters)){
errors.push({msg:'Lastname must contain only Latin lowercase and uppercase letters("a"-"z")("A"-"Z")'})
}else if(!username.match(letter2)){
errors.push({msg:"Username must contain only lowercase Latin letters ('a' - 'z'), numbers, and underscores ('_')"})
}else if(password.length<6){
console.log('Less than 6')
// Password length
errors.push({msg:'Password must be at least 7 characters'})
}else if(password2 !== password){
// Matching Password
errors.push({msg:'Password do not match'})
}
您可能希望刪除 if-else 語句並使其成為 if 語句,如果 if-else 中的條件評估為真,則跳過 rest。 此外,由於我們在這里要驗證多個用戶輸入,因此最好將它們提取到單獨的函數中。
let letters = /^[A-Za-z]+$/;
let letter2 = /^[a-z_]+$/;
const validateName = (names, errors) => {
Object.keys(names).forEach(key => {
if (!names[key].match(letters)) {
errors.push({
msg: `${key} must contain only Latin lowercase and uppercase letters("a"-"z")("A"-"Z")`
});
}
});
}
const validateUserName = (username, errors) => {
if (!username.match(letter2)) {
errors.push({
msg: 'Username must contain only Latin lowercase and uppercase letters("a"-"z")("A"-"Z")'
});
}
}
const validatePassword = (password, password2, errors) => {
if (password.length < 6) {
errors.push({msg:'Password must be at least 7 characters'});
} else if (password !== password2) {
errors.push({msg:'Password do not match'});
}
}
const registerChecker = (firstName,lastName,username, email, password, password2) => {
const errors = [];
// Check required fields
if (!(firstName && lastName && username && email && password && password2)) {
errors.push({msg:'Please fill all fields'});
return;
}
validateName({firstName, lastName}, errors);
validateUserName(username, errors);
validatePassword(password, password2, errors);
return errors
};
const errors = registerChecker('firstname','lastname','user_me','hello@gmail.com','pass','fs');
console.log(errors); // [{msg: "Password must be at least 7 characters"}]
同樣,您也可以添加 function 來驗證 email。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.