유효성 검사 조건
1. 아이디 : 영어소문자로 시작하여 영문+숫자 4글자~12글자
2. 비밀번호 : 영어소문자,대문자,숫자를 사용하여 8~12 글자
3. 비밀번호 확인 : 비밀번호와 같은지 체크
4. 이름 : 한글(최소 1글자)
5. 주소 : 영어 및 공백사용불가
6. 전화번호:
전화번호 1 : 010만가능
전화번호 2 : 숫자 3~4 글자
전화번호 3 : 숫자 4 글자
7. 이메일 : 영어+숫자 4~12글자뒤에 @ 뒤에@포함
→ 유효성 모두 만족하면 join.html페이지로 post방식으로 전송
<style>
.wrapper {
width: 800px;
background-color: #f8f8f8;
margin: 0 auto;
}
.wrapper>h1 {
padding-top: 30px;
text-align: center;
}
.wrapper table {
margin: 0 auto;
}
#result {
color: #faaca8;
font-size: 1.3em;
font-weight: 900;
text-align: center;
}
.wrapper table tr>td {
border-top: 2px solid #FFF;
}
.wrapper table tr:first-child>td {
border-top: 2px solid #faaca8;
}
.wrapper table tr>td:first-child {
width: 180px;
}
.wrapper table tr>td:last-child {
width: 550px;
}
.wrapper table tr>td:first-child {
padding: 15px;
font-size: 17px;
line-height: 20px;
font-weight: 500;
font-weight: 900;
}
.longInput {
margin-top: 3px;
width: 300px;
height: 38px;
}
.shortInput {
margin-top: 3px;
width: 90px;
height: 38px;
}
.wrapper form input,
.wrapper form select {
font-size: 20px;
}
.inputBox {
width: 18px;
height: 18px;
display: inline-block;
}
.botton {
width: 150px;
height: 45px;
border: none;
display: inline-block;
background-color: #2EC4B6;
color: white;
outline: none;
}
.btnBox {
margin: 30px;
padding-bottom: 30px;
text-align: center;
}
input[type="radio"] {
display: none;
}
input+label {
margin-top: 3px;
text-align: center;
display: inline-block;
background-color: #4b4b4b;
width: 150px;
color: white;
line-height: 35px;
height: 35px;
}
input:checked+label {
background-color: #2EC4B6;
}
.comment {
color: #faaca8;
font-size: 0.8em;
font-weight: 900;
}
.inputBorder {
border: 3px solid #faaca8;
}
</style>
form태그 참고
<!--action생략 시 현재페이지에 제출 / method생략 시 get-->
<div class="wrapper">
<h1>회원가입</h1>
<p id="result"></p>
<!--action생략 시 현재페이지에 제출 / method생략 시 get-->
<form action="join.html" method="post">
<table>
<tr>
<td>아이디</td>
<td><input class="longInput" type="text" name="id">
<span class="comment"></span>
</td>
</tr>
<tr>
<td>비밀번호</td>
<td><input class="longInput" type="password" name="pw">
<span class="comment"></span>
</td>
</tr>
<tr>
<td>비밀번호 확인</td>
<td><input class="longInput" type="password" name="pw_re">
<span class="comment"></span>
</td>
</tr>
<tr>
<td>이름</td>
<td><input class="longInput" type="text" name="name">
<span class="comment"></span>
</td>
</tr>
<tr>
<td>주소</td>
<td>
<input class="longInput" type="text" name="addr">
<span class="comment"></span>
</td>
</tr>
<tr>
<td>전화번호</td>
<td>
<input class="shortInput" type="text" name="phone1">
-
<input class="shortInput" type="text" name="phone2">
-
<input class="shortInput" type="text" name="phone3">
<span class="comment"></span>
</td>
</tr>
<tr>
<td>이메일</td>
<td><input class="longInput" type="text" name="email">
<span class="comment"></span>
</td>
</tr>
</table>
<div class="btnBox">
<input class="botton" type="submit" value="회원가입">
<input class="botton" type="reset" value="취소">
</div>
</form>
</div>
내가 작성한 script는 조건마다 if와 else를 통해서
true이면 테두리와 글자를 없애고, false이면 테두리와 글자를 나타나도록 하고, 기본이벤트를 제거했다.
중복이 너무 많다.......
<script>
$(function() {
var comment = $(".comment")
/*submit 버튼을 눌렀을 때 동작*/
$("input[type=submit]").click(function(event) {
var id = $("[name=id]").val();
var regExp_id = /^[a-z][a-z0-9]{3,11}$/;
if (regExp_id.test(id)) {
comment.eq(0).text("");
comment.eq(0).siblings("input").removeClass("inputBorder");
} else {
comment.eq(0).text("영문+숫자 4~12글자");
comment.eq(0).siblings("input").addClass("inputBorder");
event.preventDefault();
}
/////////////////////////////////////////////////////////////////
var pw = $("[name=pw]").val();
var regExp_pw = /^[a-zA-Z0-9]{8,12}$/;
if (regExp_pw.test(pw)) {
comment.eq(1).text("");
comment.eq(1).siblings("input").removeClass("inputBorder");
} else {
comment.eq(1).text("소문자,대문자,숫자 8~12글자");
comment.eq(1).siblings("input").addClass("inputBorder");
event.preventDefault();
}
/////////////////////////////////////////////////////////////////
var pw = $("[name=pw]").val();
var pw_re = $("[name=pw_re]").val();
if (pw != pw_re) {
comment.eq(2).text("비밀번호가 일치하지않습니다.");
comment.eq(2).siblings("input").addClass("inputBorder");
event.preventDefault();
}
/////////////////////////////////////////////////////////////////
var name = $("[name=name]").val();
var regExp_name = /^[가-힣]{1,}$/;
if (regExp_name.test(name)) {
comment.eq(3).text("");
comment.eq(3).siblings("input").removeClass("inputBorder");
} else {
comment.eq(3).text("한글(최소1글자)만 가능합니다.");
comment.eq(3).siblings("input").addClass("inputBorder");
event.preventDefault();
}
/////////////////////////////////////////////////////////////////
var addr = $("[name=addr]").val();
var regExp_addr = /^[가-힣]+$/;
if (regExp_addr.test(addr) && !addr == "") {
comment.eq(4).text("");
comment.eq(4).siblings("input").removeClass("inputBorder");
} else {
comment.eq(4).text("영어사용 및 공백이 불가능합니다");
comment.eq(4).siblings("input").addClass("inputBorder");
event.preventDefault();
}
/////////////////////////////////////////////////////////////////
var phone1 = $("[name=phone1]").val();
var phone2 = $("[name=phone2]").val();
var phone3 = $("[name=phone3]").val();
var regExp_phone1 = /^010$/;
var regExp_phone2 = /^[0-9]{3,4}$/;
var regExp_phone3 = /^[0-9]{4}$/;
if (regExp_phone1.test(phone1)
&& regExp_phone2.test(phone2)
&& regExp_phone3.test(phone3)) {
comment.eq(5).text("");
comment.eq(5).siblings("input").removeClass("inputBorder");
} else {
comment.eq(5).text("전화번호를 확인하세요");
comment.eq(5).siblings("input").addClass("inputBorder");
event.preventDefault();
}
/////////////////////////////////////////////////////////////////
var email = $("[name=email]").val();
var regExp_email = /^[a-z0-9]{4,12}@[a-z]+\.+[a-z]+$/;
if (regExp_email.test(email)) {
comment.eq(6).text("");
comment.eq(6).siblings("input").removeClass("inputBorder");
} else {
comment.eq(6).text("이메일을 확인하세요");
comment.eq(6).siblings("input").addClass("inputBorder");
event.preventDefault();
}
});
});
</script>
강사님 review는 처음부터 테두리와 글자가 없도록 세팅하고
if조건을 통해 세팅변경 및 count를 증가시켜 count에 따라 기본이벤트를 제거하여 제출되지 않도록 했다.
<script>
$(function() {
$("input[type=submit]").click(function(event) {
//count : if문을 탔는지 알기위한 변수
var count = 0;
var inputs = $("input");
var comments = $(".comment");
//submit버튼을 누를 때마다 처음에는 테두리와 글자 없도록 세팅
inputs.css("border", "");
comments.html("");
//1. 아이디검사
var idReg = /^[a-z][a-z0-9]{3,11}$/;
//! : 만족하지 못했을 때
if (!idReg.test(inputs.eq(0).val())) {
count++;
comments.eq(0).html('소문자, 숫자로 4~12글자');
inputs.eq(0).css("border", "3px solid #faaca8")
}
//2. 비밀번호 검사
var pwReg = /^[a-zA-Z0-9]{8,12}$/;
if (!pwReg.test(inputs.eq(1).val())) {
count++;
comments.eq(1).html("영문, 숫자 조합 8~12글자");
inputs.eq(1).css("border", "3px solid #faaca8")
}
//3. 비밀번호 확인 검사
if (inputs.eq(1).val() == inputs.eq(2).val()) {
count++;
comments.eq(2).html("비밀번호가 일치하지 않습니다.")
inputs.eq(2).css("border", "3px solid #faaca8")
}
//4. 이름 검사
//var nameReg = /^[가-힣]{1,}$/;
var nameReg = /^[가-힣]+$/;
if (!nameReg.test(inputs.eq(3).val())) {
count++;
comments.eq(3).html("한글 최소 한글자 이상")
inputs.eq(3).css("border", "3px solid #faaca8")
}
//5. 주소 검사
//영어 사용이 안된다는 것을 그대로 조건식에 활용하자.
var addrReg = /^[a-zA-Z]+$/;
//영어가 포함되어있거나 공백일 때
if (addrReg.test(inputs.eq(4).val()) || inputs.eq(4).val() == '') {
count++;
comments.eq(4).html("영어 사용 및 공백 불가능")
inputs.eq(4).css("border", "3px solid #faaca8")
}
//6. 전화번호 검사
var pReg1 = /^010$/;
var pReg2 = /^\d{3,4}$/;
var pReg3 = /^[0-9]{4}/;
if (!(pReg1.test(inputs.eq(5).val()) &&
pReg2.test(inputs.eq(6).val()) &&
pReg3.test(inputs.eq(7).val()))) {
count++;
comments.eq(5).html("전화번호를 확인해주세요.")
inputs.eq(5).css("border", "3px solid #faaca8")
inputs.eq(6).css("border", "3px solid #faaca8")
inputs.eq(7).css("border", "3px solid #faaca8")
}
//7. 이메일 검사
//(\.) : 문자.으로 사용할 때 (정규표현식에서 .은 모든 단일문자를 의미함)
var emailReg = /^[a-z0-9]{4,12}@\./;
if (!emailReg.test(inputs.eq(8).val())) {
count++;
comments.eq(6).html("이메일을 확인해주세요")
inputs.eq(8).css("border", "3px solid #faaca8")
}
if (count > 0) {
//기본이벤트 제거
event.preventDefault();
}
});
});
</script>
'JQuery' 카테고리의 다른 글
07_반응형 웹(1) : 레이아웃 (0) | 2020.11.02 |
---|---|
06_유효성검사(실습예제(2)) (0) | 2020.10.30 |
06_유효성검사 (0) | 2020.10.30 |
단계가 있는 회원가입 (0) | 2020.10.30 |
메뉴 만들기 (accordion) (0) | 2020.10.30 |