JSP, Servlet, MySQL/JSP - webmarket

유효성 검사 : 상품 등록 데이터의 유효성 검사하기 2

샤리미 2023. 9. 9. 15:46
728x90
반응형

=회원가입 폼 페이지에 입력한 데이터 형식 유효성 검사하기=

 

/ch08/validation05.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<html>
	<head>
		<title>Validation</title>
	</head>
	<!-- 자바스크립트로 폼 페이지에서 입력 항목의 데이터를 검사하는 핸들러함수를 checkMember()을 작성한다. -->
	<script type="text/javascript">
		function checkMember() {
			
			
			var regExpId = /^[a-z|A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/;//영문 대소문자,한글자음모음 검사용 정규표현식
			var regExpName = /^[가-힣]*$/;//이름에대해 한글만 검사하는 정규표현식
			var regExpPasswd = /^[0-9]*$/;//숫자만
			var regExpPhone = /^\d{3}-\d{3,4}-\d{4}$/;//전화번호 형태인지 검사하는 정규표현식
			var regExpEmail = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;//이메일 형태인지 검사
			
			var form = document.Member;
			
			//폼 페이지에서 입력항목인 아이디, 이름, 비밀번호,전화번호,이메일 등의 입력데이터를 저장한다. 
			var id = form.id.value;
			var name = form.name.value;
			var passwd = form.passwd.value;
			var phone = form.phone1.value+"-"+form.phone2.value+"-"+form.phone3.value;
			var email = form.email.value;
			
			if(!regExpId.test(id)){//입력된 아이디가 위 11행의 정규 표현식에 해당하는지 검사. 해당하지않으면 아래 경고창 및 해당 입력 항목에 커서.
				alert("아이디는 문자로 시작햐!");
				form.id.select();
				return;
			}
			if(!regExpName.test(name)){//입력된이름이 위 12행의 정규 표현식에 해당하는지 검사. 해당하지않으면 아래 경고창 및 해당 입력 항목에 커서.
				alert("이름은 한글만 입력햐");
				return;
			}
			if(!regExpPasswd.test(passwd)){//입력된 비밀번호가 위 13행의 정규 표현식에 해당하는지 검사. 해당하지않으면 아래 경고창 및 해당 입력 항목에 커서.
				alert("비밀번호는 숫자만 입력해줘..");
				return;
			}
			if(!regExpPhone.test(phone)){//입력된 전화번호가위 14행의 정규 표현식에 해당하는지 검사. 해당하지않으면 아래 경고창 및 해당 입력 항목에 커서.
				alert("연락처 입력을 확인해봐");
				return;
			}
			if(!regExpEmail.test(email)){//입력된이메일이 위 15행의 정규 표현식에 해당하는지 검사. 해당하지않으면 아래 경고창 및 해당 입력 항목에 커서.
				alert("이메일 똑바로 입력해라");
				return;
			}
			
			form.submit(); //폼페이지에 입력된 데이터 값을 서버로 전송한다. 
		}
	</script>
	<body>
		<h3>회원 가입</h3>
		<form action="validation05_process.jsp" name="Member" method="post">
			<p> 아이디 : <input type="text" name="id">
			<p> 비밀번호 : <input type="password" name="passwd">
			<p> 이름 : <input type="text" name="name">
			<p> 연락처 : <select name="phone1">
							<option value="010">010</option>							
							<option value="011">011</option>							
							<option value="016">016</option>
							<option value="017">017</option>							
							<option value="019">019</option>
						</select> - <input type="text" maxlength="4" size="4" name="phone2"> -
						<input type="text" maxlength="4" size="4" name="phone3">
			<p> 이메일 : <input type="text" name="email">
			<p> <input type="submit" value="가입하기" onclick="checkMember()">
				<input type="reset" value="다시 쓰기">
		</form>
	</body>
</html>

 

ch08/validation05_process.jsp

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<title>Validation</title>
</head>
<body>
	<%
		request.setCharacterEncoding("utf-8");
	
	%>
	<p> 아이디 : <%=request.getParameter("id")%>
	<p> 비밀번호 : <%=request.getParameter("passwd")%>
	<p> 이름 : <%=request.getParameter("name")%>
	<p> 연락처 : <%=request.getParameter("phone1")%>-<%=request.getParameter("phone2")%>-<%=request.getParameter("phone3")%>
	<p> 이메일 : <%=request.getParameter("email")%>
</body>
</html>

이렇게 경고창이 뜨긴하는ㄷㅔ..
이상하다. ㅇ왜 넘어가버리지 그냥?

다시 확인했는데도, 틀린게 없다....... 나중에 다시보자.. 정신차리고 다시봐..

 

NOTE_자주 사용되는 패턴

다음은 폼페이지에 입력 양식의 데이터 형식으로 주로 사용되는 정규 표현식의 예이다

데이터 형식 패턴
숫자만 ^[0-9]*$
영문자만 ^[a-zA-Z]*$
한글만 ^[가-힣]*$
영문자와 숫자만 ^[a-zA-Z0-9]*$
이메일 /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i
휴대전화 ^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$
^\d{3}-\d{3,4}-\d{4}$
전화번호 ^\d{2,3}-\d{3,4}-\d{4}$
주민등록번호 \d{6}\-[1-4]\d{6}
IP주소 ([0-9]{1,3})\.([0-9]{1,3})\([0-9]{1,3})\.([0-9]{1,3})
URL ^(file|gopher|news|nntp|telnet|https?|ftps?|sftp):\/\/([a-z0-9-]+\.)+[a-z0-9]{2,4}.$
날짜 ^\d{1,2}\/\d{1,2}\/\d{2,4}$

http://regexlib.com  에서 다양한 정규 표현식을 얻을 수 있다. 

 

 

 

04. 웹쇼핑몰 : 상품 등록 데이터의 유효성 검사하기

 

=상품 등록 페이지의 유효성 검사하기=

 

1. 자바스크립트 관리 폴더 만들기: /resources/폴더에 자바스크립트 파일 폴터를 만들고 js 에 validarion.js 파일을 생성한다. 

 

2. 유효성 검사흘ㄹ 위한 핸들러 함수 작성하기

function CheckAddProduct(){
	
	//폼 페이지에서 유효성 검사를 위한 입력 항목인 상품 아이디, 상품명,가격,재고 수 등의 id 속성값으로 입력 데이터를 가져올 수 있도록
	// getElementById()메소드를 작성한다. 
	var productId = document.getElementById("productId");
	var name = document.getElementById("name");
	var unitPrice = document.getElementById("unitPrice");
	var unitsInStock = document.getElementById("unitsInStock");
	
	
	//상품 아이디 체크
	if(!check(/^P[0-9]{4,11}$/, productId,"[상품코드]\nP와 숫자를 조합하여 5~12까지 입력하세요\n 첫 글자는 반드시 P로 시작하세요")) return false;
	
	//상품 명 체크
	if(name.value.length < 4 || name.value.length > 12) {
		alert("[상품명]\n최소 4자에서 최대 12자까지 입력하세요");
		name.select();
		name.focus();
		return false;
	}
	
	//상품 가격 체크
	if(uniPrice.value.length == 0 || isNaN(unitPrice.value)){
		alert("[가격]\n숫자만 입력하세요");
		unitPrice.select();
		unitPrice.focus();
		return false;
	}
	
	if(unitPrice.value < 0) {
		alert("[가격]\n음수는 입력할수 없습니다.");
		unitPrice.select();
		unitPrice.focus();
		return false;
	}else if(!check(/^\d+(?:[.]?[\d]?[\d])?$/, unitPrice,"[가격]\n소수점 둘째 자리까지만 입력하세요"))
	return false;
	
	
	//재고 수 체크
	if(isNaN(unitsInStock.value)){
		alert("[재고 수]\n 숫자만 입력하세요");
		unitsInStock.select();
		unitInStock.focus();
		return false;
	}
	
	//입력 항목에 대해 정규 표현식으로 검사하여 오류가 있으면 오퓨 메시지를 출력하고 해당 입력 항목에 커서가 놓이도록 check()함수를 작성한다. 
	function check(regExp,e,msg){
		
		if(regExp.test(e.value)){
			return true;
		}
		alert(msg);
		e.select();
		e.focus();
		return false;
		
	}
	document.newProduct.submit() //폼 페이지에 입력된 데이터 값을 서버로 전송한다. 
}

3. 상품 등록 페이지 수정하기 : addProduct.jsp 파일 수정

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css">

<!-- 폼 페이지에 입력 항목의 데이터를 검사하는 핸들러 함수가 저장된 바바스크립트 파일 validation.js를 가져오도록 작성 -->
<script type="text/javascript" src="./resources/js/validation.js"></script>
<title>상품 등록</title>
</head>
<body>
	<jsp:include page="menu.jsp"/>
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">상품 등록</h1>
		</div>
	</div>
	<div class="container">
		<!-- 파일업로드를 위한 폼 태그에 enctype 속성값을 추가로 작성해준다.  -->
		<form name="newProduct" action="./processAddProduct.jsp" class="form-horizontal" method="post" enctype="multipart/form-data">
			<div class="form-group row">
				<label class="col-sm-2">상품 코드</label>
				<div class="col-sm-3">
					<input type="text" name="productId" id="productId" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">상품명</label>
				<div class="col-sm-3">
					<input type="text" name="name" id="name" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">가격</label>
				<div class="col-sm-3">
					<input type="text" name="unitPrice" id="unitPrice" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">상세 정보</label>
				<div class="col-sm-3">
					<textarea name="description" cols="50" rows="2" class="form-control"></textarea><!-- 상품 설명값을 여러줄로 입력받도록 textarea 태그를 작성한다 -->
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">제조사</label>
				<div class="col-sm-3">
					<input type="text" name="manufacturer" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">분류</label>
				<div class="col-sm-3">
					<input type="text" name="category" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">재고 수</label>
				<div class="col-sm-3">
					<input type="text" name="unitInStock" id="unitInStock" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<label class="col-sm-2">상태</label> <!-- 상품 상태값중 하나만 선택 입력받도록 radio로 작성 -->
				<div class="col-sm-5">
					<input type="radio" name="condition" value="New"> 신규 제품    
					<input type="radio" name="condition" value="Ole"> 중고 제품           
					<input type="radio" name="condition" value="Refurbished"> 재생 제품                     
				</div>
			</div>
			
			<!-- 파일을 입력받도록 input 태그의 type 속성값을 file로 작성, name 속성을 작성한다.  -->
			<div class="form-group row">
				<label class="col-sm-2">이미지</label>
				<div class="col-sm-5">
					<input type="file" name="productImage" class="form-control">
				</div>
			</div>
			<div class="form-group row">
				<div class="col-sm-offset-2 col-sm-10">
				<!-- <등록>을 클릭하면 핸들러 함수CheckAddProduct()가 실행되도록 onclick속성을 작성한4ㄷ -->
					<input type="button" class="btn btn-primary" value="등록" onClick="CheckAddProduct()">
					
				</div>
			</div>
		</form>
	</div>
</body>
</html>

 

 

요약

 

01. 유효성 검사의 개요

  • 유효성 검사는 사용자가 폼 페이지에서 입력한 데이터 값이 서버로 전송되기 전에 특정 규칙에 맞게 입력되었는지 검증하는 것을 말한다. 
  • 유효성 검사를 위한 핸들러 함수는 폼 페이지에서 이벤트가 발생했을 때 (<submit>를 클릭한 경우)의 유효성 검사를 위해 매핑하는 메소드이다

02. 기본 유효성 검사

  • 기본 유효성 검사는 사용자가 폼 페이지의 입력 항목에 입력한 데이터 값이 있는지 없는지 확인하고 데이터 길이, 숫자 등 기본적인 것이 맞는지 검사한다. 
  • 데이터 값의 유무에 대한 검사에서는 예를 들어 회원 가입 페이지에서 사용자가 아이디와 비밀번호 등의 필수 입력 항목을 입력하지 않고 <전송>을 클릭하면 입력하지 않았다는 오류 메시지가 나타난다. 
  • 데이터 길이에 대한 검사는 회원 가입 페이지에서 아이디, 비밀번호 등과 같은 입력 데이터의 제한 길이를 확인한다.
  • 숫자 여부는 isNaN()함수를 활용하여 검사한다.

03. 데이터 형식 유효성 검사

  • 데이터 형식 유효성 검사는 사용자가 폼 페이지의 입력 항목에 입력한 데이터 값이 특정 형태에 적합한지 검사하기 위해 정규 표현식을 사용하는 방법으로 기본 유효성 검사보다 복잡하다.
  • 정규 표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다
  • 정규 표현석에서 사용하는 기호를 메타 문자라고 한다. 메타 문자는 정규 표현식 내부에서 특정한 의미를 가진 문자이다. 
728x90
반응형