-
Notifications
You must be signed in to change notification settings - Fork 35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
💫 Sprint Mission 4 Complete #119
The head ref may contain hidden characters: "part2-\uAE40\uC900\uC601-sprint4"
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
const emailInput = document.querySelector('.email input'); | ||
const emailError = document.querySelector('#email-error'); | ||
const loginButton = document.querySelector('#login-button'); | ||
|
||
const passwordInput = document.querySelector('.password input'); | ||
const passwordError = document.querySelector('#password-error'); | ||
|
||
function validateEmail() { | ||
if (emailInput.value.trim() === '') { | ||
emailError.textContent = '이메일을 입력해주세요.'; | ||
emailError.style.display = 'block'; | ||
emailInput.style.border = '1px solid red'; | ||
return false; | ||
} else if (!emailInput.value.includes('@')) { | ||
emailError.textContent = '잘못된 이메일 형식입니다.'; | ||
emailError.style.display = 'block'; | ||
emailInput.style.border = '1px solid red'; | ||
return false; | ||
} else { | ||
emailError.textContent = ''; | ||
emailError.style.display = 'none'; | ||
emailInput.style.border = 'none'; | ||
return true; | ||
} | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. p3; validateEmail는 현재 크게는 두 가지 일을 하고 있어요! 함수를 더 유지보수 및 재사용하기 용이하게 구성하려면, 더 작은 단위로 나누는게 좋아요! 우선 예시로
이 2가지로 함수를 재구성해보겠습니다. // 이메일 값의 유효성만 딱 검증하는 함수
const validateEmail = (emailValue) => {
if (emailValue === '') return {isValid: false, message: '이메일을 입력해주세요.'};
// --> 요렇게 조건에 따라 값을 리턴해버리면 함수가 종료되며 else나 else if 조건을 쓰지 않아도 되는 효과가 있습니다.
// --> 이에 따라, 함수가 조금 더 깔끔해질 수 있어요!
if (!emailValue.includes('@')) return {isValid: false, message: '잘못된 이메일 형식입니다.'};
// --> 객체로 값을 리턴하는 이유는, 이렇게 했을 때, isValid 여부 뿐만이 아니라, isValid가 false인 경우에 변경되어야 하는 textContent 등도 한 번에 처리가능하여 좋습니다.
return {isValid: true, message: ''};
}
// 이메일 값의 유효성에 따라 UI를 변경하는 부분
const �changeEmailInputStyleByValidation = () => {
const eamilValidation = validateEmail(emailInput.value);
if (eamilValidation.isValid) {
emailError.textContent = '';
emailError.style.display = 'none';
emailInput.style.border = 'none';
return;
}
emailError.textContent = eamilValidation.message;
emailError.style.display = 'block';
emailInput.style.border = '1px solid red';
}
emailInput.addEventListener('blur', changeEmailInputStyleByValidation); |
||
|
||
function validatePassword() { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. p4; |
||
if (passwordInput.value.trim() === '') { | ||
passwordError.textContent = '비밀번호를 입력해주세요.'; | ||
passwordError.style.display = 'block'; | ||
return false; | ||
} else if (passwordInput.value.length < 8) { | ||
passwordError.textContent = '비밀번호를 8자 이상 입력해주세요.'; | ||
passwordError.style.display = 'block'; | ||
return false; | ||
} else { | ||
passwordError.textContent = ''; | ||
passwordError.style.display = 'none'; | ||
return true; | ||
} | ||
} | ||
|
||
function validateForm() { | ||
const isEmailValid = validateEmail(); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. p4; const { isValid: isEmailValid } = validateEmail(emailInput.value); |
||
const isPasswordValid = validatePassword(); | ||
if (isEmailValid && isPasswordValid) { | ||
loginButton.parentNode.href = '/items.html'; | ||
} else { | ||
loginButton.removeAttribute('href'); | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. p4; if (isEmailValid && isPasswordValid) {
loginButton.parentNode.href = '/items.html';
return;
}
loginButton.removeAttribute('href'); |
||
} | ||
|
||
emailInput.addEventListener('blur', validateEmail); | ||
passwordInput.addEventListener('blur', validatePassword); | ||
|
||
loginButton.addEventListener('click', validateForm); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
p3;
단순히 @ 유무 여부로 이메일 값을 검사하기보다는 정확하게 이메일 패턴에 맞는지 확인하는게 좋을 것 같아요!
요럴때 정규표현식을 많이 사용하게 됩니다!