
HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입하기</title>
<link rel="stylesheet" href="css/register.css">
<script type="text/javascript" src="../js/jquery-3.7.1.min.js"></script>
<script type="text/javascript" src="js/register.js"></script>
</head>
<body>
<div id="container">
<form name="registerFrm" action="registermember.do">
<fieldset>
<legend>회원가입정보</legend>
<ul>
<li>
<label class="title" for="userid">아이디</label>
<input type="text" class="myinput" id="userid" size="20" maxlength="20" autofocus required autocomplete="off" />
<span></span>
</li>
<li>
<label class="title" for="passwd1">패스워드</label>
<input type="password" class="myinput" id="passwd1" size="20" maxlength="20" required />
<span></span>
</li>
<li>
<label class="title" for="passwd2">패스워드확인</label>
<input type="password" class="myinput" id="passwd2" size="20" maxlength="20" required />
<span></span>
</li>
<li>
<label class="title" for="name">성명</label>
<input type="text" class="myinput" id="name" size="20" maxlength="10" required />
<span></span>
</li>
<li>
<label class="title" for="email">이메일</label>
<input type="text" class="myinput" id="email" size="20" maxlength="20" required placeholder="예: hongkd@gmail.com" />
<span></span>
</li>
<li>
<label class="title">성별</label>
<label for="male">남자</label><input type="radio" name="gender" id="male" />
<label for="female">여자</label><input type="radio" name="gender" id="female" />
<span id="err_gender"></span>
</li>
<li>
<input type="submit" value="확인" />
<input type="reset" value="취소" />
</li>
</ul>
</fieldset>
</form>
</div>
</body>
</html>
JS
$(document).ready(function() {
$("form[name='registerFrm'] input:text[id='userid']").bind("blur", (e) => {
const regExp_userid = /^[A-Z][A-Za-z0-9]{4,19}$/;
const bool = regExp_userid.test($(e.target).val());
if(!bool) {
$(e.target).next().html("5글자 이상 20글자 이하 이며, 첫글자는 대문자이고 나머지는 영문자,숫자만 가능합니다.").css({'color':'red', 'font-size':'8pt'});
$(e.target).val("");
$(e.target).focus();
}
else {
$(e.target).next().empty();
}
});
$("form[name='registerFrm'] input:password[id='passwd2']").bind("keydown", (e) => {
const passwd1_val = $("form[name='registerFrm'] input:password[id='passwd1']").val();
if(passwd1_val == ""){
$("form[name='registerFrm'] input:password[id='passwd1']").next().html("암호를 입력하세요").css({'color':'red', 'font-size':'8pt'});
}
});
$("form[name='registerFrm'] input:password[id='passwd1']").bind("keydown", (e) => {
$(e.target).next().empty();
});
$("form[name='registerFrm'] input:password[id='passwd1']").bind("blur", (e) => { func_passwd_equal_check(); });
$("form[name='registerFrm'] input:password[id='passwd2']").bind("blur", (e) => { func_passwd_equal_check(); });
$("form[name='registerFrm'] input:text[id='name']").bind("blur", (e) => {
const regExp_name = /^[가-힣]{2,10}$/;
const bool = regExp_name.test($(e.target).val());
if(!bool) {
$(e.target).next().html("성명은 공백없이 한글로만 입력해야 한다").css({'color':'red', 'font-size':'8pt'});
$(e.target).val("");
$(e.target).focus();
}
else {
$(e.target).next().empty();
}
});
$("form[name='registerFrm'] input:text[id='email']").bind("blur", (e) => {
const regExp_email = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;
const bool = regExp_email.test($(e.target).val());
if(!bool) {
$(e.target).next().html("이메일 형식에 맞지 않습니다").css({'color':'red', 'font-size':'8pt'});
$(e.target).val("");
$(e.target).focus();
}
else {
$(e.target).next().empty();
}
});
$("form[name='registerFrm']").bind("submit", ()=>{
const checked_length = $("form[name='registerFrm'] input:radio[name='gender']:checked").length;
if(checked_length == 0) {
$("form[name='registerFrm']").find("span#err_gender").html("성별을 선택하세요").css({'color':'red', 'font-size':'8pt'});
return false;
}
});
$("form[name='registerFrm'] input:reset").bind('click', ()=>{
history.go(0);
});
});
function func_passwd_equal_check(){
const passwd1 = $("form[name='registerFrm'] input:password[id='passwd1']").val();
const passwd2 = $("form[name='registerFrm'] input:password[id='passwd2']").val();
if(passwd1 != passwd2) {
$("form[name='registerFrm'] input:password[id='passwd2']").next().html("입력하신 암호값과 암호확인 값이 같지 않습니다").css({'color':'red', 'font-size':'8pt'});
}
else {
$("form[name='registerFrm'] input:password[id='passwd2']").next().empty();
}
}
CSS
@charset "UTF-8";
body {
margin: 0;
padding: 0;
font-family: Arial, "MS Trebuchet", sans-serif;
word-break: break-all;
}
div#container {
width: 80%;
margin: 30px auto;
}
legend {
font-size: 20pt;
}
ul {
list-style-type: none;
padding: 0;
}
ul > li {
line-height: 40px;
}
label.title {
display: inline-block;
width: 100px;
color: navy;
font-weight: bold;
}
input.myinput {
height: 20px;
}
input[type=submit] , input[type=reset] {
width: 100px;
height: 40px;
background-color: #000;
color: #fff;
font-size: 12pt;
margin: 20px 0 0 40px;
border: none;
}
정리
- jQueryStudy -> 02_form -> register.html, register.js, register.css