JS - DOM을 활용한 회원가입 유효성 검사

김도영·2022년 5월 4일
0
post-thumbnail

DOM을 활용하여 회원가입 페이지를 만들어 유효성 검사를 하는 script를 만들어 봤다.

HTML

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>유효성 검사</title>
  <link rel="stylesheet" href="style.css">
  <script src="validator.js"></script>
</head>

<body>
  <h1>회원가입</h1>
  <fieldset>
    <label>아이디</label>
    <input type="text" id="username">
    <div class="failure-message hide">아이디는 네글자 이상이여야 합니다.</div>
    <div class="success-message hide">사용할 수 있는 아이디 입니다.</div>
  </fieldset>

  <fieldset>
    <label>비밀번호</label>
    <input type="password" id="password">
  </fieldset>

  <fieldset>
    <label>비밀번호 확인</label>
    <input type="password" id="password-retype">
    <div class="mismatch-message hide">두 비밀번호가 일치하지 않습니다.</div>
  </fieldset>

  <fieldset>
    <label>전화번호</label>
    <input type="text" id="phonenumber">
    <div class="misnumber-message hide">숫자를 입력해주세요.</div>
  </fieldset>

  <fieldset>
    <button id="joinbutton">회원가입</button>
  </fieldset>

  <script src="script.js"></script>
</body>

</html>

다음으로 DOM 상에서는 엘리먼트가 존재하나, 웹사이트에서 표시할 때는 해당 엘리먼트가 레이아웃 상에서 없는 것처럼 취급하기 위해 css 파일을 하나 작성하였다.

CSS

.hide {
  display: none;
}

다음은 sciprt이다.

Sciprt

let elInputUsername = document.querySelector('#username')
let elInputPassword = document.querySelector('#password')
let elInputPasswordretype = document.querySelector('#password-retype')
let elNumbertype = document.querySelector('#phonenumber')
let elJoinbutton = document.querySelector('#joinbutton')

let elFailuremessage = document.querySelector('.failure-message')
let elSuccessmessage = document.querySelector('.success-message')
let elMismatchmessage = document.querySelector('.mismatch-message')
let elMisnumbermessage = document.querySelector('.misnumber-message')

elJoinbutton.disabled = true;

//아이디 입력창에 글자를 키보드로 입력할 때, 성공메시지와 실패메시지를 보여주는 함수
elInputUsername.onkeyup = function () {
  if (isMoreThan4Length(elInputUsername.value)) {
    elSuccessmessage.classList.remove('hide')
    
    elFailuremessage.classList.add('hide')
  }
  else {
    elSuccessmessage.classList.add('hide')

    elFailuremessage.classList.remove('hide')
  }
}

//글자수가 4개이상이면
function isMoreThan4Length(value) {
  return value.length >= 4
}

//비밀번호 입력창에 값을 입력하면, 비밀번호 값과 비밀번호 확인값이 일치하지 않으면 불일치 메시지를 표시하는 함수
elInputPasswordretype.onkeyup = function () {
  if ( isMatch(elInputPassword.value, elInputPasswordretype.value) ) {
    elMismatchmessage.classList.add('hide')
  }
  else {
    elMismatchmessage.classList.remove('hide')
  }
}

//비밀번호 값과 비밀번호 확인값이 일치하는지 판별하는 함수
function isMatch (password1, password2) {
  if ( password1 === password2 ) {
    return true;
  }
  else {
    return false;
  }
}

//전화번호 값을 입력할때, 숫자가 아니면 불일치 메시지를 표시하는 함수
elNumbertype.onkeyup = function () {
  if (isNumbermatch(elNumbertype.value)) {
    elMisnumbermessage.classList.add('hide')
  }
  else {
    elMisnumbermessage.classList.remove('hide')
  }
}

//전화번호 값을 숫자값만 받는 함수
function isNumbermatch(value) {
  let phonenumber = /^[0-9]*$/
  if ( phonenumber.test(value) === true ) {
    return true;
  }
  else {
    return false;
  }
}

elInputUsername.addEventListener('keyup', button)
elInputPassword.addEventListener('keyup', button)
elInputPasswordretype.addEventListener('keyup', button)
elNumbertype.addEventListener('keyup', button)

//아이디, 비밀번호, 비밀번호 확인, 전화번호 값을 모두 입력하였을 때, 회원가입 버튼이 활성화 되는 함수
function button() {
  switch (!(elInputUsername.value && elInputPassword.value && elInputPasswordretype.value && elNumbertype.value)) {
    case true : elJoinbutton.disabled = true; break;
    case false : elJoinbutton.disabled = false; break
  }
}

결과화면

profile
Blockchain Developer

0개의 댓글