[JS] 유효성 검사

입력조건

1. 이름은 필수로 입력해야 한다.

2. 닉네임은 2~5글자로 구성해야 한다.

3. 이메일 형식을 지켜야 한다.

4. 비밀번호는 영어+숫자+특수문자를 조합해야 한다.

5. 비밀번호와 비밀번호 확인 란에 동일한 문자를 입력해야 한다.

 

이런 기능을 유효성 검사라고 부른다. 


HTML 코드

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <link rel="stylesheet" href="styles.css" />
  </head>
  <body>
    <div id="container">
      <h1>회원 가입</h1>
      <div style="width: fit-content; margin: 0 auto;">
      <form>
        <label for="name">이름</label>
        <input type="text" id="name" required"/>
        <div class="name-error hide">필수 입력 항목입니다.</div>

        <label for="nickname">닉네임</label>
        <input type="text" id="nickname" />
        <div class="nickname-error hide">닉네임은 2~5글자로 구성해주세요.</div>

        <label for="email">이메일</label>
        <input type="email" id="email" />
        <div class="email-error hide">올바른 메일 형식이 아닙니다.</div>

        <label for="password">비밀번호</label>
        <input type="password" id="password" />
        <div class="pw-error hide">영어+숫자+특수문자를 조합하여 작성해주세요.</div>

        <label for="chkPassword">비밀번호 확인</label>
        <input type="password" id="chkPassword" />
        <div class="repw-error hide">비밀번호가 일치하지 않습니다.</div>

        <button type="submit" id="btn">가입하기</button>
      </form>
      <div>
    <script src="index.js"></script>
  </body>
</html>

 


JavaScript 코드

먼저 DOM을 이용해서 각 input에 입력된 값과 에러들을 가져온다.

const name = document.getElementById("name");	//입력된 이름
const nameError = document.querySelector(".name-error");	//이름이 입력되지 않았을 때의 오류
const nickname = document.getElementById("nickname");	//입력된 닉네임
const nicknameError = document.querySelector(".nickname-error");
const email = document.getElementById("email");	//입력된 이메일 
const emailError = document.querySelector(".email-error");	//이메일 형식이 맞지 않을 때의 오류
const pw = document.getElementById("password");	//입력된 비밀번호
const pwError = document.querySelector(".pw-error"); 	//비밀번호가 영어+숫자+특수문자가 아닐 때의 오류
const repw = document.getElementById("chkPassword");// 입력된 비밀번호 확인
const repwError = document.querySelector(".repw-error"); //비밀번호 일치 하지 않았을 때의 오류

 

각 항목들이 조건에 만족하면 true를 반환하고 아니면 false를 반환하는 함수들을 만들어준다.

//닉네임 길이가 2~5이면 true, 아니면 false
function nicknameLength(nickname) {
  return nickname.length >= 2 && nickname.length <= 5;
}
//이메일 형식 검사
function validEmail(email) {
  return /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i.test(email);
}

//영어+숫자+특수문자 모두 포함하면 true, 아니면 false
function checkPw(pw) {
  return /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]+$/.test(pw);
}
//비밀번호가 일치하면 true, 아니면 false
function isMatch(pw, repw) {
  return pw === repw;
}

 

input 박스들에 입력이 들어오면(.onkeyup) 다음 함수들이 실행된다.

error.classList.remove("hide")는 에러 메시지를 표시하는 코드이고

error.classList.add("hide")는 에러 메시지를 숨겨주는 코드이다. 

name.onkeyup = function () {
  if (name.value.length == 0) {
    nameError.classList.remove("hide");
  } else {
    nameError.classList.add("hide");
  }
};

nickname.onkeyup = function () {
  if (nickname.value.length !== 0) {
    if (nicknameLength(nickname.value)) {
      nicknameError.classList.add("hide");
    } else {
      nicknameError.classList.remove("hide");
    }
  } else {
    nicknameError.classList.add("hide");
  }
};

email.onkeyup = function () {
  if (email.value.length !== 0) {
    if (validEmail(email.value)) {
      emailError.classList.add("hide");
    } else {
      emailError.classList.remove("hide");
    }
  } else {
    emailError.classList.add("hide");
  }
};

pw.onkeyup = function () {
  //값이 입력된 경우
  if (pw.value.length !== 0) {
    if (checkPw(pw.value)) {
      pwError.classList.add("hide");
    } else {
      pwError.classList.remove("hide");
    }
  } else {
    pwError.classList.add("hide");
  }
};

repw.onkeyup = function () {
  if (repw.value.length !== 0) {
    if (isMatch(pw.value, repw.value)) {
      repwError.classList.add("hide");
    } else {
      repwError.classList.remove("hide");
    }
  } else {
    repwError.classList.add("hide");
  }
};

 

 

'JavaScript' 카테고리의 다른 글

JS 동작원리  (0) 2024.08.05
[JS]Reduce 함수  (4) 2024.04.12
[JS]JavaScript 화살표 함수  (0) 2023.05.29
JavaScript Closure(+실행 컨텍스트와 스코프 체인을 곁들인..)  (0) 2023.05.29
JavaScript this  (0) 2023.05.28