본문으로 바로가기

JavaScript - 회원가입폼

category Java/java 2020. 8. 24. 11:16

JoinForm.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입(정규식)</title>
<script src="js/checkreg.js"></script>
<script src="http://dmaps.daum.net/map_js_init/postcode.v2.js"></script>
</head>
<body>
<div align="center">
	<form id="f1" action="mailto:kysktj1234@naver.com?subject=회원가입" method="post">
		<table border="1">
			<tr>
				<th colspan="2" bgcolor="skyblue" align="center" width="600" height="30">회원 기본 정보</th>
			</tr>
			<tr>
				<td width="20%" align="center" bgcolor="#D4F4FA" height="25">아이디 : </td>
				<td width="80%"><input type="text" maxlength="12" name="my_id" id="my_id" height="25" onchange="chkId(this.value)"> 4~12자의 영문 대소문자와 숫자로만 입력</td>
			</tr>
			<tr>
				<td align="center" bgcolor="#D4F4FA" height="25">비밀번호 : </td>
				<td><input type="password" maxlength="12" name="my_pw" id="my_pw" onchange="chkPw(this.value)"> 4~12자의 영문 대소문자와 숫자로만 입력</td>
			</tr>
			<tr>
				<td align="center" bgcolor="#D4F4FA" height="25">비밀번호확인 : </td>
				<td><input type="password" maxlength="12" id="pwd_check"  onchange="chkPwc(this.value)"></td>
			</tr>
			<tr>
				<td align="center" bgcolor="#D4F4FA" height="25">메일주소 : </td>
				<td><input type="email" id="my_email" name="my_email" onchange="chkEmail(this.value)"> 예) id@domain.com </td>
			</tr>
			<tr>
				<td align="center" bgcolor="#D4F4FA" height="25">이름 : </td>
				<td><input type="text" id="my_name" name="my_name" onchange="chkName(this.value)"></td>
			</tr>
			<tr>
				<th colspan="2" bgcolor="skyblue" align="center" width="600" height="30" height="25">개인 신상 정보</th>
			</tr>
			<tr>
				<td align="center" bgcolor="#D4F4FA">우편번호 : </td>
				<td><input type="text" id="postcode" name="postcode" value="우편번호" readonly>
        			<input type="button" value="우편번호 찾기" onclick="DaumPostcode()"><br>
       			  	<input type="text" id="roadAddress" name="roadAddress" value="도로면 주소" readonly>
         			<input type="text" id="jibunAddress" name="jibunAddress" value="지번주소" readonly><br>
         			<input type="text" name="detailAddress" value="상세주소">
          			<input type="text" id="extraAddress" name="extraAddress" value="참고주소" readonly></td>
			</tr>
			<tr>
				<td align="center" bgcolor="#D4F4FA" height="25" height="25">주민등록번호 : </td>
				<td><input type="text" id="my_num1" name="my_num1" maxlength="6" size = "15">
				- <input type="password" id="my_num2" name="my_num2" maxlength="7" size = "15" onchange="chkNum()"> 
				 예)123456-1234567 </td>
			</tr>
			<tr>
				<td align="center" bgcolor="#D4F4FA" height="25" height="25">생일 : </td>
				<td><input type="text" id="my_year" name="my_year" size="4" readonly>년
				<input type="text" id="my_month" name="my_month" size="2" readonly>월
				<input type="text" id="my_day" name="my_day" size="2" readonly>일
				</td>
			</tr>
			<tr>
				<td align="center" bgcolor="#D4F4FA" height="25">관심분야 : </td>
				<td>
					<input type="checkbox" name="Interest" value="computer">컴퓨터
					<input type="checkbox" name="Interest" value="internet">인터넷
					<input type="checkbox" name="Interest" value="trip">여행
					<input type="checkbox" name="Interest" value="movie">영화감상
					<input type="checkbox" name="Interest" value="music">음악감상
				</td>
			</tr>
			<tr>
				<td align="center" bgcolor="#D4F4FA">자기소개</td>
				<td><textarea rows="8" cols="60" id="intro"></textarea></td>
			</tr>
		</table>
		<br>
		<input type="button" value="회원 가입" onclick="chk()">&nbsp;
		<input type="reset" value="다시 입력">
	</form>
</div>
</body>
</html>

reg.js  (자바스크립트)

	// 주소
	function DaumPostcode() {
    new daum.Postcode({
        oncomplete: function(data) {	
            // 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.

            // 도로명 주소의 노출 규칙에 따라 주소를 표시한다.
            // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
            var roadAddr = data.roadAddress; // 도로명 주소 변수
            var extraRoadAddr = ''; // 참고 항목 변수

            // 법정 동명이 있을 경우 추가한다. (법정리는 제외)
            // 법정 동의 경우 마지막 문자가 "동/로/가"로 끝난다.
            if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
                extraRoadAddr += data.bname;
            }
            // 건물명이 있고, 공동주택일 경우 추가한다.
            if(data.buildingName !== '' && data.apartment === 'Y'){
               extraRoadAddr += (extraRoadAddr !== '' ? ', ' + data.buildingName : data.buildingName);
            }
            // 표시할 참고항목이 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
            if(extraRoadAddr !== ''){
                extraRoadAddr = ' (' + extraRoadAddr + ')';
            }

            // 우편번호와 주소 정보를 해당 필드에 넣는다.
            document.getElementById('postcode').value = data.zonecode;   // 우편번호
            document.getElementById("roadAddress").value = roadAddr;   // 도로명
            document.getElementById("jibunAddress").value = data.jibunAddress;   // 동 주소
            
            // 참고항목 문자열이 있을 경우 해당 필드에 넣는다.
            if(roadAddr !== ''){
                document.getElementById("extraAddress").value = extraRoadAddr;
            } else {
                document.getElementById("extraAddress").value = '';
            }

            var guideTextBox = document.getElementById("guide");
            // 사용자가 '선택 안함'을 클릭한 경우, 예상 주소라는 표시를 해준다.
            if(data.autoRoadAddress) {
                var expRoadAddr = data.autoRoadAddress + extraRoadAddr;
                guideTextBox.innerHTML = '(예상 도로명 주소 : ' + expRoadAddr + ')';
                guideTextBox.style.display = 'block';
//////////////예상 지번수////////////////////
        	 }   /*else if(data.autoJibunAddress) {
                var expJibunAddr = data.autoJibunAddress;
                guideTextBox.innerHTML = '(예상 지번 주소 : ' + expJibunAddr + ')';
                guideTextBox.style.display = 'block';
            } else {
                guideTextBox.innerHTML = '';
                guideTextBox.style.display = 'none';
            }*/
        }
    }).open();
}

		// 정규식
		var idPwChk = /^[a-zA-Z0-9]{4,12}$/;	// 아이디, 비밀번호 정규식
		var emailChk = /^[a-zA-Z0-9]+@([a-zA-Z0-9]{1,10})\.([a-zA-Z]{1,10})+$/;	//이메일 정규식
		var nameChk = /[가-힣]{2,}/;	// 이름 정규식
		var numChk = /^(?:[0-9]{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[1,2][0-9]|3[0,1]))-[1-4][0-9]{6}$/; // 주민번호 정규식
		
		// true/false
		var ynId="no";	// ID check Yes or No
		var ynPw="no";	// Password
		var ynPwc="no";	// Password Check
		var ynMail="no";// Email
		var ynName="no";// Name
		var ynNum="no";	// Num
		
		function chk() {
			var inter = 0;
			var arrInterest = document.getElementsByName("Interest");	// 관심분야
			var introTa = document.getElementById("intro");	// 자기소개
			var pcode = document.getElementById("postcode");	// 우편번호
			
			for(var i=0; i<arrInterest.length; i++){
				if(arrInterest[i].checked){
					inter++;
					break;
				}
			}
			
			if(ynId!="yes"){
				chkId("");
			}else if(ynPw!="yes"){
				chkPw("");
			}else if(ynPwc!="yes"){
				chkPwc("");
			}else if(ynMail!="yes"){
				chkEmail("");
			}else if(ynName!="yes"){
				chkName("");
			}else if(pcode.value=="우편번호"){
				alert("주소를 입력해주세요.");
				pcode.focus();
			}else if(ynNum!="yes"){
				chkNum("");
			}else if(inter==0){
				alert("관심분야를 선택해주세요.");
			}else if(introTa.value==""){
				alert("자기소개를 입력해주세요.");
				introTa.focus();
			}
			else{
				f1.submit();
			}
			
		}
		
	function chkId(myId) {	// 아이디 검사
		if(idPwChk.test(myId)){
			ynId="yes"
		}else{
			alert("아이디를 다시 확인해주세요.")
			ynId="no";
			f1.my_id.value="";
			f1.my_id.focus();
		}
	}
	function chkPw(myPw) {	// 비밀번호 검사
		var myId = document.getElementById("my_id").value;
		
		if(myPw==myId){
			alert("아이디와 비밀번호는 동일하게 사용할 수 없습니다.");
			f1.my_pw.value="";
			ynPw="no";
			f1.my_pw.focus();
		}else if(idPwChk.test(myPw)){
			ynPw="yes";
		}else{
			alert("비밀번호를 다시 확인해주세요.")
			ynPw="no";
			f1.my_pw.value="";
			ynPw="no";
			f1.my_pw.focus();
		}
		
	}
	function chkPwc(pwChk) {
		var myPw = document.getElementById("my_pw").value;	// 비밀번호 확인 검사
		
		if(pwChk==""){
			alert("비밀번호 확인을 다시 확인해주세요.");
			f1.pwd_check.value="";
			ynPwc="no";
			f1.pwd_check.focus();
		}else if(pwChk==myPw){
			ynPwc="yes";
		}else{
			alert("비밀번호가 일치하지 않습니다.");
			f1.pwd_check.value="";
			ynPwc="no";
			f1.pwd_check.focus();
		}
	}
	function chkEmail(myEmail) {	// 이메일 검사
		if(emailChk.test(myEmail)){
			ynMail="yes";
		}else{
			alert("이메일을 다시 확인해주세요.");
			ynMail="no";
			f1.my_email.value="";
			f1.my_email.focus();
		}
		
	}
	function chkName(myName) {	// 이름 검사
		if(nameChk.test(myName)){
			ynName="yes";
		}else{
			alert("이름을 다시 확인해주세요.");
			ynName="no";
			f1.my_name.value="";
			f1.my_name.focus();
		}
		
	}
	function chkNum() { // 주민등록번호 검사
		var num1 = document.getElementById("my_num1"); // 주민등록번호 앞
		var num2 = document.getElementById("my_num2"); // 주민등록번호 뒤
		
		var addYear = document.getElementById("my_year"); // 생일 - 년
		var addMon = document.getElementById("my_month"); // 생일 - 월
		var addDay = document.getElementById("my_day"); // 생일 - 일
		
		var FirstNum = num1.value.substring(0, 1);	// 맨 앞자리 숫자
		
		var num = (num1.value)+"-"+(num2.value);	// 주민등록번호
		
		if(numChk.test(num)){
			var arrNum1 = new Array(); // 앞자리를 담을 배열
			var arrNum2 = new Array(); // 뒷자리를 담을 배열

			for (var i = 0; i < num1.value.length; i++) {
				arrNum1[i] = num1.value.charAt(i);
			} // 주민번호 앞자리를 배열에 순서대로 담는다.

			for (var i = 0; i < num2.value.length; i++) {
				arrNum2[i] = num2.value.charAt(i);
			} // 주민번호 뒷자리를 배열에 순서대로 담는다.

			var tempSum = 0;

			for (var i = 0; i < num1.value.length; i++) {
				tempSum += arrNum1[i] * (2 + i);
			} // 주민번호 검사방법을 적용하여 앞 번호를 모두 계산하여 더함

			for (var i = 0; i < num2.value.length - 1; i++) {
				if (i >= 2) {
					tempSum += arrNum2[i] * i;
				} else {
					tempSum += arrNum2[i] * (8 + i);
				}
			} // 같은방식으로 앞 번호 계산한것의 합에 뒷번호 계산한것을 모두 더함

			if ((11 - (tempSum % 11)) % 10 != arrNum2[6]) {
				alert("주민번호를 다시 확인해주세요.");
				num1.value = "";
				num2.value = "";
				ynNum="no";
				num1.focus();
			} else {
				ynNum = "yes";
				
				addYear.value = arrNum1[0]+arrNum1[1];	// 년
				console.log(addYear.value);
				
				if(arrNum1[0]=="0"){
					addYear.value = "20"+addYear.value;	// 맨 앞이 0이면 20+년		
				}else{
					addYear.value = "19"+addYear.value;	// 아니면 19+년
				}
				
				addMon.value = arrNum1[2]+arrNum1[3];	// 월
				addDay.value = arrNum1[4]+arrNum1[5];	// 일
			}
		}else{
			alert("주민등록번호를 다시 확인해주세요.");
			num1.value = "";
			num2.value = "";
			ynNum="no";
			num1.focus();
		}
	}
반응형

'Java > java' 카테고리의 다른 글

JSP 문법  (0) 2020.08.26
서블릿 (Servlet)  (0) 2020.08.25
자바스크립트 (JavaScript)  (0) 2020.08.20
네트워크  (0) 2020.08.14
스레드 (Thread)  (0) 2020.08.13