Javascript

회원가입

오시리엔 2023. 9. 12. 09:43
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>회원가입</title>

    <!-- css 파일을 불러오는 코드 -->

    <!-- 아이콘 사용을 위한 Font Awesome 6 CDN -->
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css">

    <!-- 구글 웹 폰트 사용을 위한 CDN -->
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>

    <!-- 내가 만든 CSS 파일-->
    <link rel="stylesheet" type="text/css" href="./css/reset.css">
    <link rel="stylesheet" type="text/css" href="./css/commons.css">
    <link rel="stylesheet" type="text/css" href="./css/test.css">
    <style>
        /*
            성공/실패에 대한 스타일 구현
        */
        .success-feedback {
            color: #00b894;
            display: none;
        }
        .fail-feedback,
        .fail2-feedback
        {
            color: #d63031;
            display: none;
        }
        .success ~ .success-feedback {
            display: block;
        }
        .fail ~ .fail-feedback {
            display: block;
        }
        .fail2 ~ .fail2-feedback {
            display: block;
        }
        .success {
            /* important는 우선순위를 최상위로 올린다 */
            border-color: #00b894 !important;
            background-image: url("./image/valid.png");
            background-repeat: no-repeat;
            background-position-x: right;
            background-position-y: center;
            background-size: 1em;
        }
        .fail,
        .fail2
        {
            border-color: #d63031 !important;
            background-image: url("./image/invalid.png");
            background-repeat: no-repeat;
            background-position-x: right;
            background-position-y: center;
            background-size: 1em;
        }
    </style>

    <!-- javascript 작성 공간 -->
    <script>
        function checkId() {
            var input = document.querySelector("[name=memberId]");

            var regex = /^[a-z0-9]{5,20}$/;
            var isValid = regex.test(input.value);
           
            input.classList.remove("success", "fail");
            if(isValid) {
                input.classList.add("success");//클래스 추가
            }
            else {
                input.classList.add("fail");
            }
        }
   
        function checkPw() {
            var input = document.querySelector("[name=memberPw]");

            var regex = /^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$])[A-Za-z0-9!@#$]{8,16}$/;
            var isValid = regex.test(input.value);

            input.classList.remove("success", "fail");
            input.classList.add(isValid ? "success" : "fail");
        }
       
        function checkPw2() {
            var pw = document.querySelector("[name=memberPw]");
            var pwCheck = document.querySelector("#password-check");

            //var isValid = 비밀번호가 1글자이상 입력되어 있고 두 입력값이 같으면;
            var isValid = pw.value.length >= 1 && pw.value == pwCheck.value;

            pwCheck.classList.remove("success", "fail", "fail2");
            if(pw.value.length == 0){
                pwCheck.classList.add("fail2");
            }
            else if(isValid) {
                pwCheck.classList.add("success");
            }
            else {
                pwCheck.classList.add("fail");
            }
        }
    </script>
</head>
<body>
    <div class="container w-500">
        <div class="row">
            <h1>회원가입</h1>
        </div>
        <div class="row left">
            <label>아이디</label>
            <input type="text" name="memberId" class="form-input w-100" oninput="checkId();">
            <div class="success-feedback">멋진 아이디입니다!</div>
            <div class="fail-feedback">아이디는 영문과 숫자 5~20자로 작성하세요</div>
        </div>
        <div class="row left">
            <label>비밀번호</label>
            <input type="password" name="memberPw" class="form-input w-100" oninput="checkPw();">
            <div class="success-feedback">올바른 비밀번호 형식입니다!</div>
            <div class="fail-feedback">비밀번호는 영문,숫자,특수문자를 반드시 포함하여 8~16자로 작성하세요</div>
        </div>
        <div class="row left">
            <label>비밀번호 확인</label>
            <input type="password" id="password-check" class="form-input w-100" oninput="checkPw2();">
            <div class="success-feedback">비밀번호가 일치합니다</div>
            <div class="fail-feedback">비밀번호가 일치하지 않습니다</div>
            <div class="fail2-feedback">비밀번호를 먼저 작성하세요</div>
        </div>
    </div>
</body>
</html>

'Javascript' 카테고리의 다른 글

사용자 등록(Form)  (0) 2023.09.14
기본 이벤트 제어  (0) 2023.09.13
정규표현식  (0) 2023.09.11
글자수 입력제한  (0) 2023.09.08
글자 크기 조절  (2) 2023.09.07