<!DOCTYPE html>
<html>
<head>
<title>회원 가입</title>
<meta charset="utf-8">
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script type="text/javascript">
function validate() {
var objID = document.getElementById("my_id");
var objPwd1 = document.getElementById("my_pwd");
var objPwd2 = document.getElementById("my_pwd2");
var objEmail = document.getElementById("my_mail");
var objName = document.getElementById("my_name");
var objaddress = document.getElementById("my_address");
var idfyText = document.getElementById("idfyText");
var arr = new Array(); //주민번호를 담을 배열 // 배열을 하나 만들겠다.
// var idfyText = document.getElementById("identify"); // 주민등록번호 텍스트필드를 가리키는 변수 identify
var anArr = [2,3,4,5,6,7,8,9,2,3,4,5,1]; // 주민등록번호 공식을 쓰기위한 정수형 배열
//var idSum=0; // 정수형의 자료들을 받기위해 0으로 초기화한 변수, 주민등록번호의 합을 넣을 예정
var tempSum = 0; //주민번호 합을 넣는 공간
//아이디와 패스워드가 적합한지 검사할 정규식
var re1 = /^[a-zA-Z0-9]{4,12}$/; //
//[]안에 있는 값만 쓰겠다
//이메일이 적합한지 검사할 정규식
var re2 = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;
//이름이 적합한지 검사할 정규식
var re3 = /^[가-힣]{2,}$/; // 자음 모음 마지막 글자 조합이 '힣'
//아이디 입력 하지 않았을 경우
if ((objID.value) == "") {
alert("아이디를 입력하지 않았습니다.");
objID.focus(); //잘못 입력하면 아이디를 바로 입력할 수 있게 해주는 것
return false;
}
//아이디 유효성 검사
//내가 입력한 데이터를 검사하는 check()
//만약 내가 아이디에 정규화 방식을 하나라도 지키지 않으면 if문 안으로 들어가서 alert message를 띄움
if(!check(re1,objID,"아이디는 4~12자의 대소문자와 숫자로만 입력 가능합니다.")) {
objID.value="";
return false; //반환 할 곳 없이 if문 탈출
}
//비밀번호 입력 하지 않았을 경우
if ((objPwd1.value) == ""){
alert("비밀번호를 입력해 주세요");
objPwd1.value="";
return false;
}
//비밀번호 유효성 검사
//만약 내가 비밀번호에 정규화 방식을 하나라도 지키지 않으면 if문 안으로 들어가서 alert message를 띄움
if (!check(re1, objPwd1, "비밀번호는 4~12자의 대소문자와 숫자로만 입력 가능합니다.")) {
return false;
}
if ((objPwd2.value=="")){
alert("비밀번호 확인을 입력해 주세요");
return false;
}
//비밀번호와 비밀번호 확인이 일치 하지 않을 경우
if ((objPwd1.value)!=(objPwd2.value)) {
alert("비밀번호가 일치 하지 않습니다.");
objPwd2.value="";
return false;
}
//이메일 입력 안 했을 경우
if ((objEmail.value)=="") {
alert("이메일을 입력해 주세요");
return false;
}
//이메일이 잘못된 경우
if (!check(re2,objEmail,"이메일을 잘못 입력 했습니다.")) {
objEmail.value="";
return false;
}
//이름 입력 안 한 경우
if ((objName.value)=="") {
alert("이름을 입력해 주세요");
return false;
}
//이름에 특수 문자가 들어간 경우
if (!check(re3,objName,"이름이 잘못 되었습니다.")) {
objName.value="";
return false;
}
for (var i=0; i<idfyText.value.length; i++) { // 인덱스 0번부터 주민등록번호 텍스트필드에 쓴 문자열의 길이를 하나씩 읽어나가겠다.
arr[i] = idfyText.value.charAt(i); // charAt : 문자열의 요소 하나하나씩 보겠다.
}
for (var i=0; i<arr.length-1; i++) { // 인덱스 0번부터 방금 위의 for문에서 만든 배열-1 길이까지 하나씩 읽어나가겠다. (-1의 이유는 주민등록번호 마지막 숫자 전까지의 합과 일련의 식을 이용해 마지막 값과 계산을 해야되기 때문.
tempSum += arr[i] * anArr[i]; // 배열에서 받았던 우리가 입력한 주민등록번호와 주민등록번호 공식을 쓰기위한 배열과 곱해서 모두 더해준다.
}
if((11-(tempSum%11))!=arr[12]) { // 주민등록번호 유효성을 위한 공식 (왜 그런지 알 필요가 없다는 것)
alert("주민번호를 형식에 맞게 쓰세요."); // 알라트 알라트
idfyText.value = ""; // 내용 지우기
idfyText.focus(); // 포커스 온
return false; // 자료들을 넘기지 못한다.
}
if (arr[6]==1 || arr[6]==2) { // 인덱스 6번째 값이 1900년대는 981028-'1'또는'2'이부분
var y = parseInt(idfyText.value.substring(0,2)); // substring : 일정 문자열을 반환. substring(시작인덱스, 종료인덱스) 시작인덱스부터 종료인덱스 전까지 반환. (0번째 배열인 '9'하고 1번째 배열인 '8')
var m = parseInt(idfyText.value.substring(2,4)); // 2이상부터 4미만까지. 인덱스2<=문자열<인덱스4 (위에선 1 과 0)
var d = parseInt(idfyText.value.substring(4,6)); // 4이상부터 6미만까지. 인덱스4<=문자열<인덱스6(2 와 8)
f.my_year.value = 1900+y; // html의 년도(id,name) 텍스트필드에 년도를 전달하겠다.
f.month.value = m; // html의 월(id,name)의 셀렉에 월의 값을 전달하겠다.
f.day.value = d; // html의 일(id,name)의 셀렉에 일의 값을 전달하겠다.
} else if(arr[6]==3||arr[6]==4){ // 인덱스 6번째 값이 2000년대는 021028-'3'또는'4' 이부분
var y = parseInt(idfyText.value.substring(0,2)); // 위와 동일.
var m = parseInt(idfyText.value.substring(2,4));
var d = parseInt(idfyText.value.substring(4,6));
f.my_year.value = 2000+y; // 년도 ex)2000+02 = 2002
f.month.value = m; // 월
f.day.value = d; // 일
}
//관심분야가 하나라도 체크 되지 않은 경우
if (f.ch[0].checked == false &&f.ch[1].checked == false &&
f.ch[2].checked == false &&f.ch[3].checked == false &&
f.ch[4].checked == false) {
alert("관심분야를 체크해 주세요");
return false;
}
//자기소개 1글자라도 적지 않은 경우
if (f.my_intro.value=="") {
alert("자기소개를 입력해주세요");
return false;
}
}
function check(re,what,message){//정규화데이터,아이템 id,메세지
if (re.test(what.value)) {//what의 문자열에 re의 패턴이 있는지 나타내는 함수 test
//만약 내가 입력한 곳의 값이 정규화 데이터를 썼다면 true를 반환해서 호출 된 곳으로 리턴됨
return true;
}
alert(message);
what.value = "";
what.focus();
}
function sample4_execDaumPostcode() {
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('sample4_postcode').value = data.zonecode;
document.getElementById("sample4_roadAddress").value = roadAddr;
document.getElementById("sample4_jibunAddress").value = data.jibunAddress;
// 참고항목 문자열이 있을 경우 해당 필드에 넣는다.
if(roadAddr !== ''){
document.getElementById("sample4_extraAddress").value = extraRoadAddr;
} else {
document.getElementById("sample4_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();
}
</script>
<style type="text/css">
</style>
</head>
<body>
<p>
<h1 align="center">회원 가입</h1>
</p>
<FORM name ="f" method="post" onsubmit="return validate()"
action="MAILTO:creatorheh@gmail.com">
<table width="50%" height="80" border="1" align="center" cellpadding="5" cellspacing="0" bordercolor="#A5D8FA">
<tr align="center">
<td colspan="2" align="center" bgcolor="skyblue">
<div id="dv" style = "font-weight: bold;" font-size: 18px">회원 기본 정보
</div></td>
</tr>
<tr>
<td bgcolor="lightgray" align="center">
<div style = "font-weight: bold;">아이디:
</div></td>
<td><input type="text" name="my_id" id="my_id" size="15" maxlength="15">
4~12자의 영문 대소문자와 숫자로만 입력</td>
</tr>
<tr>
<td bgcolor="lightgray" align="center"><div style = "font-weight: bold;">비밀번호:</div></td>
<td><input type="password" id="my_pwd" name="my_pwd" size="15" maxlength="15">
4~12자의 영문 대소문자와 숫자로만 입력</td>
</tr>
<tr>
<td bgcolor="lightgray" align="center"><div style = "font-weight: bold;">비밀번호 확인:</div></td>
<td><input type="password" id="my_pwd2" size="15" maxlength="15"></td>
</tr>
<tr>
<td bgcolor="lightgray" align="center"><div style = "font-weight: bold;">메일주소:</div></td>
<td><input type="text" name="my_name" id="my_mail" size="20" maxlength="20">
예) id@domain.com</td>
</tr>
<tr>
<td bgcolor="lightgray" align="center"><div style = "font-weight: bold;">이름:</div></td>
<td><input type="text" name="my_name" id="my_name" size="20" maxlength="20"></td>
</tr>
<tr align ="center">
<td colspan="2" bgcolor="skyblue">
<div style = "font-weight: bold;" font-size: 18px">개인 신상 정보</div></td>
</tr>
<tr>
<td bgcolor="lightgray" align="center"><div style = "font-weight: bold;">주민등록번호</div></td>
<td><input type="text" id="idfyText" name="my_num1" size="30" maxlength="13">
예) 1234561234567</td>
</tr>
<tr>
<td bgcolor="lightgray" align="center"><div style = "font-weight: bold;">생일:</div></td>
<td><input type="text" id="my_year" name="my_year" size="4" maxlength="4">년
<select name="month" id="month">
<option value="1" selected="selected">1</option>
<option value="2">2</option>
<option value="3" >3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
월<select name="day" id="day">
<option value="1" selected="selected">1</option>
<option value="2">2</option>
<option value="3" >3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>일</td>
</tr>
<tr>
<td bgcolor="lightgray" align="center"><div style="font-weight: bold;">관심분야:</div></td>
<td>
<input type="checkbox" name="ch" value="COMPUTER">컴퓨터
<input type="checkbox" name="ch" value="INTERNET">인터넷
<input type="checkbox" name="ch" value="TRABLE">여행
<input type="checkbox" name="ch" value="MOVIE">영화감상
<input type="checkbox" name="ch" value="MUSIC">음악감상</FORM>
</td>
</tr>
<tr><th bgcolor="lightgray" align="center"><div style="font-weight: bold;">주소:</div></th>
<td colspan="2" align="center">
<input type="text" id="sample5_address" placeholder="주소">
<input type="button" onclick="sample5_execDaumPostcode()" value="주소 검색"><br>
<div id="map" style="width:300px;height:300px;margin-top:10px;display:none"></div></td>
</tr>
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script src="//dapi.kakao.com/v2/maps/sdk.js?appkey=db8a355dc9e1713703a21fdfcbe6e050&libraries=services"></script>
<script>
var mapContainer = document.getElementById('map'), // 지도를 표시할 div
mapOption = {
center: new daum.maps.LatLng(37.537187, 127.005476), // 지도의 중심좌표
level: 5 // 지도의 확대 레벨
};
//지도를 미리 생성
var map = new daum.maps.Map(mapContainer, mapOption);
//주소-좌표 변환 객체를 생성
var geocoder = new daum.maps.services.Geocoder();
//마커를 미리 생성
var marker = new daum.maps.Marker({
position: new daum.maps.LatLng(37.537187, 127.005476),
map: map
});
function sample5_execDaumPostcode() {
new daum.Postcode({
oncomplete: function(data) {
var addr = data.address; // 최종 주소 변수
// 주소 정보를 해당 필드에 넣는다.
document.getElementById("sample5_address").value = addr;
// 주소로 상세 정보를 검색
geocoder.addressSearch(data.address, function(results, status) {
// 정상적으로 검색이 완료됐으면
if (status === daum.maps.services.Status.OK) {
var result = results[0]; //첫번째 결과의 값을 활용
// 해당 주소에 대한 좌표를 받아서
var coords = new daum.maps.LatLng(result.y, result.x);
// 지도를 보여준다.
mapContainer.style.display = "block";
map.relayout();
// 지도 중심을 변경한다.
map.setCenter(coords);
// 마커를 결과값으로 받은 위치로 옮긴다.
marker.setPosition(coords)
}
});
}
}).open();
}
</script>
<tr>
<td bgcolor="lightgray" align="center"><div style="font-weight: bold;">자기소개:</div></td>
<td><textarea name="my_intro" cols="70" rows="5"></textarea></td>
</tr>
</table>
<p align="center">
<input type="submit" name="submit" value="회원 가입">
<input type="reset" value="다시 입력">
</p>
</script>
</body>
</html>
'빅데이터 교육과정 (2021-01-25 ~ 2021-06-24) > WEB (02-22 ~)' 카테고리의 다른 글
자바스크립트 비정규식 회원가입사이트 (0) | 2021.03.05 |
---|---|
Javascript 웹 API란? + 지도 API 쓰는 법 (카카오 지도 API) (0) | 2021.03.04 |
자바스크립트 시계 표시하기 실습 (0) | 2021.03.04 |
22일차 2021.3.3.수 자바스크립트 (0) | 2021.03.04 |
21일차 2021.3.2.화 자바스크립트 (0) | 2021.03.04 |