정규 표현식은 특정 키워드를 이용해서 문자열의 데이터를 검사해준다.


대표적인 예로는 웹사이트 가입 시 Id 를 올바르게 입력했는지 이름은 잘 입력했는지 검사해준다.


regExp라는 키워드를 사용한다.


var regExp = new regExp('규칙내용');


이나 간단하게


var regExp = /규칙내용/;


위와 같이 선언하여


메소드 test, exec


그리고 String 메소드와 함께 match, replace, search, split 등이 있다.


test() : 규칙에 해당하면 true 반환


exec() : 실행




이 외에도 해당 글자를 바꾸는 대체문자와 검사 범위를 설정하는 플래그 문자


그리고 문자열의 앞과 뒤를 구분하는 표현식, 특정 문자를 검출하는 메타문자, 수량문자 등이 있다.


다음 예를 통해 쓰임을 확인해보자



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
	.area {
		border:1px solid black;
		height:150px;
		background:lightgray;
	}
</style>
</head>
<body>
	<h1>정규표현식</h1>
	<h3>정규표현식 객체 생성</h3>
	<button onclick="test1()">확인하기</button>
	<div id="area1" class="area"></div>
	
	<script type="text/javascript">
		function test1() {
			// 정규표현식은 일반적으로 회원가입 시 암호가 간단하지 않고 적절한지 판별할 때 사용
			// 정규식 변수를 선언한다.
			// var regExp = new RegExp("script");
			var regExp = /script/; // 이와같이 간단하게 사용 가능
			var str = "javascript jquery ajax";
			
			// 메소드를 사용한다.
			var area1 = document.getElementById("area1");
			
			area1.innerHTML += "test()함수 사용 : " + regExp.test(str) + "<br>";
			area1.innerHTML += "exec()함수 사용 : " + regExp.exec(str) + "<br>";
			
			// String 메소드 사용도 많이 한다.
			area1.innerHTML += "match()함수 사용 : " + str.match(regExp) + "<br>";
			// 해당 글자를 바꿔줌
			area1.innerHTML += "replace()함수 사용 : " + str.replace(regExp, "스크립트") + "<br>";
			// 글자가 몇번째에 존재하는지
			area1.innerHTML += "search()함수 사용 : " + str.search(regExp) + "<br>";
			// 우리에게 익숙한 split
			area1.innerHTML += "split()함수 사용 : " + str.split(regExp) + "<br>";
			
			
		}
	</script>
	
	<hr>
	
	<h3>대체문자</h3>
	
	<p>정규표현식을 사용하면 문자열 객체의 replace()메소드를 사용할 때
	대체문자를 사용할 수 있다.</p>
	<button onclick="test2()">실행확인</button>
	<div id="area2" class="area"></div>
	
	<script type="text/javascript">
		function test2() {
			var regExp = /a/;
			
			var str = "javascript jquery ajax";
			
			//일치하는 문자열
			//var output = str.replace(regExp, '($&)');
			
			//일치하는 부분의 앞부분 문자열
			//var output = str.replace(regExp, '($`)');
			
			//일치하는 부분의 뒷 부분 문자열
			var output = str.replace(regExp, "($')");
			
			alert(output);
			
			
		}
	</script>
	
	<h3>플래그 문자</h3>
	<p>
	g(global) : 전역 비교를 수행한다.<br>
	i(ignoreCase) : 대소문자를 가리지 않고 비교한다.<br>
	m(multiLine) : 여러줄의 검사를 수행한다.<br>
	</p>
	
	<button onclick="test3()">실행확인</button>
	<div id="area3" class="area"></div>
	
	<script type="text/javascript">
		function test3() {
			var regExp = /a/ig;
			var str = "JavaScript JQuery Ajax";
			
			var area3 = document.getElementById("area3");
			
			area3.innerHTML += str.replace(regExp, "($&)");
			
		}
	</script>
	
	<h3>앵커문자</h3>
	<p>문자열의 앞과 뒤를 구분해주는 정규표션식 기호</p>
	<button onclick="test4()">실행확인</button>
	<div id="area4" class="area"></div>
	
	<script type="text/javascript">
		function test4() {
			// '^'표시는 ~~로 시작하는 의 의미
			var regExp = /^j/gim;
			
			var str = "JavaScript\nJQuery\nAjax";
			
			var area4 = document.getElementById("area4");
			
			area4.innerHTML += "^ABC : " + str.replace(regExp, '($&)') + "<br>";
			
			var regExp2 = /ipt&/gim;
			
			area4.innerHTML += "ABC$ : " + str.replace(regExp, '($&)') + "<br>";
			
		}
	</script>
	
	<h3>메타문자</h3>
	
	<p>자바스크립트 정규 표현식 객체가 갖는 가장 유용한 기능이다.</p>
	<button onclick="test5();">실행확인</button>
	<div id="area5" class="area"></div>
	<script type="text/javascript">
		function test5() {
			var regExp1 = /[aj]/ig;
			var regExp2 = /[^aj]/ig;
			var regExp3 = /[a-z]/ig; // 알파벳인지
			
			var str = "JavaScript JQuery Ajax";
			
			var area5 = document.getElementById("area5");
			
			area5.innerHTML += "[aj] : " + str.replace(regExp1, "($&)") + "<br>";
			
			area5.innerHTML += "[^aj] : " + str.replace(regExp2, "($&)") + "<br>";
			
			area5.innerHTML += "[a-z] : " + str.replace(regExp3, "($&)") + "<br>";
		
			var regExp4 = /[0-9]/g; // 숫자인지
			var regExp5 = /[가-힣]/g; // 한글인지
			
			var str2 = "123JavaScript안녕하세요"
			
			area5.innerHTML += "[0-9] : " + str2.replace(regExp4, "($&)") + "<br>";

			area5.innerHTML += "[가-힣] : " + str2.replace(regExp5, "($&)") + "<br>";
			
		}
	</script>
	
	<hr>
	
	<h3>메타문자를 이용한 주민번호 확인</h3>
	<label>주민번호 입력 : </label>
	<input type="text" id="pno">
	<button onclick="test6();">실행확인</button>
	<div id="area6" class="aera"></div>
	
	<script type="text/javascript">
		function test6() {
			var regExp = /......-......./; // 점은 자리를 의미, 해당 열은 6번째 이후 '-'가 들어오나 안오나를 체크
			// 만약 . 점을 구분하고 싶을 땐 \를 사용 아래에서 설명
			var pno = document.getElementById("pno").value;
			
			if (regExp.test(pno)) {
				alert("정상입력");
			}else {
				alert("잘못입력");
			}
			
		}
	</script>
	
	<hr>
	
	<h3>추가 메타 문자</h3>
	<p>\d : 숫자<br>
	\w : 아무 단어<br>
	\s : 공백문자(탭, 띄어쓰기, 줄바꿈)<br>
	\D : 숫자 아님<br>
	\W : 아무 단어 아님<br>
	\S : 공백문자가 아님</p>
	
	<label>주민번호 입력 : </label>
	<input type="text" id="pno2">
	<button onclick="test7()">실행확인</button>
	<div id="area7" class="area"></div>
	
	<script type="text/javascript">
		function test7() {
			var regExp = /\d\d\d\d\d\d-[1234]\d\d\d\d\d\d/; // 앞 6자리는 숫자, 뒷자리 맨 앞에는 1234 안에서 입력하고 뒷 6자리 숫자 한다.
			
			var pno = document.getElementById("pno2").value;
			
			if (regExp.test(pno)) {
				alert("정상입력");
			}else {
				alert("잘못입력");
			}
			
		}
	</script>
	
	<h3>수량문자</h3>
	<p>
	a+ : a가 적어도 1개 이상<br>
	a* : a가 0개 또는 여러개<br>
	a? : a가 0개 또는 1개<br>
	a{5} : a가 5개<br>
	a{2,5} : a가 2~5개<br>
	a{2,} : a가 2개 이상<br>
	a{,5} : a가 5개 이하<br>
	</p>
	
	<label>주민번호 입력 : </label>
	<input type="text" id="pno3">
	<button onclick="test8();">실행확인</button>
	<div id="area8" class="area"></div>
	
	<script type="text/javascript">
		function test8() {
			var regExp = /\d{2}(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[01])-[1234]\d{6}/; // | 는 or 연산
			// 숫자는 2자리가 온다, 첫번째 ()의 의미는 01~12까지 올 수 있다이고, 두번째 ()는 01~31까지 올 수 있다는 표현
			// 뒤의 [1234]\d{6}은 주민번호 뒷자리를 의미
			
			var pno = document.getElementById("pno3").value;
			
			if (regExp.test(pno)) {
				alert("정상입력");
			}else {
				alert("잘못입력");
			}
			
			
		}
	</script>
</body>
</html>




<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>회원가입 유효성 체크</h1>
       
    <form action="" method="post" onsubmit="return validate();">       <!-- 제출시 행동 -->
    	<label for="userid">* 유저아이디</label>
    	<input type="text" name="userid" id="userid"><br>
    	<label for="pass">* 비밀번호</label>
    	<input type="password" name="pass" id="pass"><br>
    	<label for="pass1">* 확인</label>
    	<input type="password" name="pass1" id="pass1"><br>
    	<label for="name">* 이름</label>
    	<input type="text" name="name" id="name"><br>
    	<label for="email">* 이메일</label>
    	<input type="text" name="email" id="email"><br>
    	<label for="tel1">전화번호</label>
    	<input type="text" name="tel1" id="tel1" size="3" maxlength="3">-
    	<input type="text" name="tel2" id="tel2" size="3" maxlength="4">-
    	<input type="text" name="tel3" id="tel3" size="3" maxlength="4">
    	<br><br>
    	<label for="job">직업</label>
    	<select name="job" id="job">
    		<option>개발자</option>
    		<option>프로그래머</option>
    		<option>자영업자</option>
    	</select><br>
    	<label>성별</label>
    	<input type="radio" name="gender" value="m"> 남
    	<input type="radio" name="gender" value="f"> 여<br>
    	<label for="hobby">취미</label>
    	<input type="checkbox" name="hobby" value="reading"> 독서
    	<input type="checkbox" name="hobby" value="drama"> 드라마보기
    	<input type="checkbox" name="hobby" value="soccer"> 축구<br>
    	<input type="checkbox" name="hobby" value="movie"> 영화보기
    	<input type="checkbox" name="hobby" value="basket"> 드라마보기
    	<input type="checkbox" name="hobby" value="game"> 게임<br>
    	<input type="reset" value="리셋">
    	<input type="submit" value="완료">
       
    </form>
    <script>
    	var userId = document.getElementById("userid");
    	var pass = document.getElementById("pass");
    	var pass1 = document.getElementById("pass1");
    	var name1 = document.getElementById("name");
    	var email = document.getElementById("email");
    	var tel1 = document.getElementById("tel1");
    	var tel2 = document.getElementById("tel2");
    	var tel3 = document.getElementById("tel3");
    	var job = document.getElementById("job");
    	var gender = document.getElementsByName("gender");
    	var hobby = document.getElementsByName("hobby");

    	function validate() {
    		var regExp;
    		//이메일 검사(adfg@dfds.dsf)
    		//4글자 이상이 나오고 
    		//@가 나오고 1글자 이상 주소 . 글자 1~3
    		regExp = /@/;
    		console.log(email.value)
    		if(regExp.test(email.value)){
    			console.log("@포함");
    			var emailTemp = email.value.split('@');
    			console.log(emailTemp[0].length)
    			if(emailTemp[0].length >= 4){
        			console.log("이메일id 4글자 이상 체크");
        			var emailCheck = emailTemp[1].split('.');
        			console.log(emailCheck[0].length)
        			if(emailCheck[0].length >= 1){
            			console.log("이메일 주소 1글자 이상 체크");
            			console.log(emailCheck[1].length)
            			if(emailCheck[1].length <= 3 && emailCheck[1].length >= 1){
                			console.log("이메일 주소.뒤 1~3 체크 \n이메일 체크");
                		}else {
                			alert("E-mail을 확인하세요!");
                			email.select();
            				return false;
            			}
            		}else {
            			alert("E-mail을 확인하세요!");
            			email.select();
        				return false;
        			}
        		}else {
        			alert("E-mail을 확인하세요!");
        			email.select();
    				return false;
    			}
    		}else {
    			alert("E-mail을 확인하세요!");
    			email.select();
				return false;
			}
    		
    		
    		//아이디 검사
    		//첫글자는 반드시 영문 소문자, 총 4~12자로 이루어지고
    		//숫자가 반드시 하나 이상 포함되어야 함
    		//영문 소문자와 숫자로 이루어져야 한다.
			
    		regExp = /[a-z]/;
    		var regExp2 = /[0-9]/;
    		console.log(regExp.test(userId.value.charAt(0)));
			if(regExp.test(userId.value.charAt(0))){
    			console.log("첫글자 소문자");
    			console.log(userId.value.length >= 4 && userId.value.length <= 12);
    			if(userId.value.length >= 4 && userId.value.length <= 12){
					console.log("4~12자 체크")
					console.log(regExp2.test(userId.value));
        			if(regExp2.test(userId.value)){
						console.log("숫자 하나 체크");
						var idtemp = userId.value.replace(regExp2, ""); // 숫자 필터
						console.log(idtemp);
						regExp = /[A-Z]/;
            			if(regExp.test(idtemp)){
            				alert("ID에 대문자는 사용 할 수 없어요!");
                			userId.select();
            				return false;
                		}else {
            				console.log("소문자 체크");
            				console.log("ID 체크");
            			}
            		}else {
            			alert("숫자를 꼭 포함한 ID이어야 합니다.");
            			userId.select();
        				return false;
        			}
        		}else {
        			alert("ID는 4~12자 이내로 입력해주세요.");
        			userId.select();
    				return false;
    			}
    		}else {
    			alert("첫 글자는 소문자이어야 합니다.");
    			userId.select();
				return false;
			}
			//비밀번호 확인 검사
			//비밀번호와 비밀번호 확인 값이 일치
			
			
    		
			if(pass.value == pass1.value){
    			console.log("비밀번호 확인을 올바르게 했습니다!");
    		}else {
    			alert("비밀번호를 다시 한번 확인해 주세요.");
				return false;
			}
			
			//이름 검사
			//2글자 이상, 한글만
			console.log(name1.value);
			console.log(name1.value.length);
			if(name1.value.length >= 2){
				console.log("두 글자 이상 확인");
				var korCheck = true;
				regExp = /^[가-힣]+$/;
				for (var i = 0; i < name1.value.length; i++) {
					if(regExp.test(name1.value.charAt(i))){ }
					else{
						alert(regExp.test(name1.value.charAt(i)));
						korCheck = false;
					}
				}
				if (korCheck) {
					console.log("한글 확인");
				}else {
					alert("이름은 한글만 입력해주세요!");
					return false;
				}
    		}else {
    			alert("이름은 두 글자 이상이어야 합니다!");
				return false;
			}


			//전화번호 검사
			//전화번호 앞자리는 2~3자리 숫자
			//두번째자리는 3~4자리 숫자
			//세번째 자리는 4자리 숫자
			console.log("전화번호 체크");
			regExp = /[0-9]{2,3}/;
			console.log(regExp.test(tel1.value));
			if(regExp.test(tel1.value)){
				console.log("첫째 자리 체크");
				regExp = /[0-9]{3,4}/;
				if(regExp.test(tel2.value)){
					console.log("첫째 자리 체크");
					regExp = /[0-9]{4}/;
					if(regExp.test(tel3.value)){
						console.log("셋째 자리 체크");
						console.log("전화번호 정상");
		    		}else {
		    			alert("전화번호 셋째 자리 오류!");
						return false;
					}
	    		}else {
	    			alert("전화번호 둘째 자리 오류!");
					return false;
				}
    		}else {
    			alert("전화번호 첫째 자리 오류!");
				return false;
			}
			
			alert("가입을 환영합니다!");

		}
	  	
		
		
    </script>
</body>
</html>



+ Recent posts