S1_U10_과제. 유효성 검사

Judevv·2023년 5월 11일
0

과제. 유효성 검사

학습 목표

  • DOM 기초 실습을 통해, 구체적인 사용법을 익힐 수 있다.
  • querySelector를 활용하여, HTML 엘리먼트 정보를 가져올 수 있다.
  • oncilck, onkeyup 속성이나 addEventListener 메서드로 이벤트 핸들러 함수를 HTML 엘리먼트에 적용할 수 있다.
  • 이벤트 핸들러 함수에서 이벤트가 발생한 곳의 정보를 확인할 수 있다.
  • 이벤트 핸들러 함수로 유효성 검사를 실행할 수 있다.
  • 유효성 검사에 필요한 기술 요소를 익힐 수 있다.
  • 유효성 검사에 필요한 HTML 엘리먼트, CSS 속성이 무엇인지 알 수 있다.
  • 엘리먼트가 화면에 표시되거나 사라지게 만들 수 있다. (display: none)
  • 유효성 검사에서 활용할 수 있는 정규 표현식의 기초 사용법에 대해 익힐 수 있다. (advanced)
  • 관심사 분리를 적용하거나, 유효성 검사 함수를 따로 분리해서 설계할 수 있다. (advanced)

결과물

과정

과제 자체의 minimum 조건은 아래와 같다.

  • 튜토리얼에서 안내한 대로 진행하세요.
  • 추가적으로 비밀번호 입력 UI를 HTML을 이용해 만드세요.
  • 비밀번호 일치 여부를 검사하는 함수를 자바스크립트로 작성하세요.
  • 함수 isMatch는 문자열 두 개를 입력으로 받고, boolean 타입을 리턴합니다.
  • 비밀번호 일치 여부에 따른 시각적 피드백을 제공하세요.
  • 모든 테스트를 통과하세요.
  • 모든 테스트를 통과한 후에는 CSS로 회원가입 페이지를 디자인해보세요.

유효성 검사는 입력된 값이 형식에 맞는지 검증하는 과정이다.

이번 과제에서는 아이디, 비밀번호, 이메일, 전화번호의 유효성 검사를 하고, 유효한 값을 받았을 때 true, 아닐 때 false를 출력하기 위해 DOM을 활용하여 요소를 연결시켜 화면에 출력했다.


아이디 유효성 검사

기존에는 '사용할 수 있는 아이디입니다' 와 아이디는 네 글자 이상이어야 합니다'만 있었는데, 아이디에 영문과 숫자만 사용할 수 있고, 아이디를 입력하지 않으면 false문이 뜨는 조건을 추가했다.

document.querySelector로 출력할 HTML 엘리먼트를 불러온다.

그리고 아이디의 유효성 검사 함수인 onlyNumberAndEnglish 함수로, 입력값이 영어 대소문자와 숫자로만 이루어져 있는지 먼저 확인한다.

그 후, isMoreThan4Length 함수를 사용하여 입력값이 4글자 이상인지 확인합니다.

elInputUsername.onkeyup = function () {
  if(onlyNumberAndEnglish(elInputUsername.value)) {
    // true 일때
    // 아이디 네글자인지 확인
    // 아이디 네글자인지도 확인되면 성공 메시지 보임
    // 아이디 네글자가 아니면 실패메시지 보임
    if (isMoreThan4Length(elInputUsername.value)) {
      // 성공 메시지 보임
      // 실패 메시지 가림
      // 아이디 조건 안내 메시지 가림
        elSuccessMessage.classList.remove('hide')
        elFailureMessage.classList.add('hide')
        elonlyEngNummessage.classList.add('hide')
        elnoUserNameMessage.classList.add('hide')
    } else {
      elSuccessMessage.classList.add('hide')
      elFailureMessage.classList.remove('hide')
      elonlyEngNummessage.classList.add('hide')
      elnoUserNameMessage.classList.add('hide')
    }
  } else if(elInputUsername.value === '') {
      elSuccessMessage.classList.add('hide')
      elFailureMessage.classList.add('hide')
      elonlyEngNummessage.classList.add('hide')
      elnoUserNameMessage.classList.remove('hide')
  } else {
    // false 일때
    // 아이디 조건 메시지 보임
    // 성공메시지 가림
    // 실패메시지 가림
    elSuccessMessage.classList.add('hide')
    // 실패메시지 보임
    elFailureMessage.classList.add('hide')
    // 아이디 조건 안내 메시지 보임
    elonlyEngNummessage.classList.remove('hide')
    elnoUserNameMessage.classList.add('hide')
  }
}

비밀번호 유효성 검사

기존에는 최소 8자 이상의 입력을 받는다는 메시지만 있었고, 영문 대소문자, 숫자, 특수문자를 포함해야 하는 조건과 input 값이 비어 있을 때 '비밀번호를 입력해주세요'를 출력하게 했다.

addEventListener로 keyup 했을 때, 먼저 입력한 비밀번호가 영문 대소문자~(이하생략)의 조건을 만족하는지 확인을 하고, 8글자 이상인지 확인하는 함수로 중첩 조건문을 돌려서 확인한다.

이메일과 전화번호의 유효성 검사 함수는 각각 isEmail과 isPhoneNumber 함수를 사용하여 이메일과 전화번호의 형식이 올바른지 확인합니다.

elPassword.addEventListener('keyup', function() {
  if (strongPassword(elPassword.value)) {
    if (isMoreThan8Length(elPassword.value)) {
      elstrongPassword.classList.add('hide')
      elPasswordLength.classList.add('hide')
      elnoPasswordMessage.classList.add('hide')
    } else {
      elPasswordLength.classList.remove('hide')
      elstrongPassword.classList.add('hide')
      elnoPasswordMessage.classList.add('hide')
    }
  } else if (elPassword.value === '') {
    elstrongPassword.classList.add('hide')
    elPasswordLength.classList.add('hide')
    elnoPasswordMessage.classList.remove('hide')
  } else {
    elstrongPassword.classList.remove('hide')
    elnoPasswordMessage.classList.add('hide')
  }
})

비밀번호가 일치하는지 아닌지는 입력받은 두 값이 같은지를 비교연산자로 비교하여 일치하면 true인 함수를 설정하였다.


이메일, 휴대전화번호 유효성 검사

이메일과 휴대전화번호의 검사는 원래 없었던 부분인데 추가했다.

두 개의 유효성 검사가 어떤 조건을 검사하는지만 다르고 형식은 비슷해서, 조건만 맞춰서 출력할 수 있도록 설정했다.

elemail.addEventListener ('keyup', function () {
  if (isEmailCorrect(elemail.value)) {
    elwrongEmailMessage.classList.add('hide')
  } else if (elemail.value === '') {
    elemailTypeMessage.classList.remove('hide')
    elwrongEmailMessage.classList.add('hide')
  } else {
    elwrongEmailMessage.classList.remove('hide')
    elemailTypeMessage.classList.add('hide')
  }
})

추가

  • Tab 키를 사용하여 넘어갈 때도 ~입력해주세요 라는 문구를 출력하기 위해 focus 이벤트로 실행되는 이벤트리스너를 추가했다.

고민해 볼 것

  • if문을 중첩시키지 않고 세 가지 조건을 확인할 수 있는 방법은?
  • 메시지를 표출하는 엘리먼트에 전부 hide를 더하거나 지우지 않고 숨기는 방법은?
  • keyup과 focus를 동시에 할 수 있는 방법은 없는가?
  • 입력하지 않고 signup 버튼을 눌렀을 경우, 경고 알람을 띄워보기

CSS

종이백과 영수증 느낌으로 디자인을 했다. 버튼에는 따로 이미지를 사용하여 background로 지정을 해줬고, hover할 때 색이 다른 이미지를 넣었는데 지금 생각해보니 투명도를 조절했어도 됐을 것 같다. 나중에 좀더 디벨롭 해봐야겠다 ㅎㅎ

profile
감성있는 개발자를 꿈꿔요

0개의 댓글