관리 메뉴

bright jazz music

정규식 본문

Language/Javascript

정규식

bright jazz music 2022. 4. 22. 07:57

https://hitomis.tistory.com/68

 

 

 

 

 

[javascript] 자주 사용하는 정규 표현식 (Regular Expression) 정리

정규표현식 패턴 /패턴/ 대표적인 패턴 의미 패턴 의미 x 문자 x xyz 문자 xyz [xyz] x,y,z 중 하나의 문자 [a-z] a~z중 하나의 문자 [^xyz] x,y,z 가 아닌 하나의 문자 [^a-z] a~z가 아닌 하나의 문자 abc|xyz..

hitomis.tistory.com

<form:form id="managerForm" method="POST" cssClass="form-horizontal" action="/managers" commandName="manager">
<%-- action="/managers" ==> ManagerController.java 폼 정보 이동 --%>



<script>
function getAddr() {
    new daum.Postcode({
        oncomplete: function(data) {
            var addr = ''; // 주소 변수
            var extraAddr = ''; // 참고항목 변수

            //사용자가 선택한 주소 타입에 따라 해당 주소 값을 가져온다.
            if (data.userSelectedType === 'R') { // 사용자가 도로명 주소를 선택했을 경우
                addr = data.roadAddress;
            } else { // 사용자가 지번 주소를 선택했을 경우(J)
                addr = data.jibunAddress;
            }

            // 사용자가 선택한 주소가 도로명 타입일때 참고항목을 조합한다.
            if(data.userSelectedType === 'R'){
                // 법정동명이 있을 경우 추가한다. (법정리는 제외)
                // 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
                if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
                    extraAddr += data.bname;
                }
                // 건물명이 있고, 공동주택일 경우 추가한다.
                if(data.buildingName !== '' && data.apartment === 'Y'){
                    extraAddr += (extraAddr !== '' ? ', ' + data.buildingName : data.buildingName);
                }
                // 표시할 참고항목이 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
                if(extraAddr !== ''){
                    extraAddr = ' (' + extraAddr + ')';
                }
                // 조합된 참고항목을 해당 필드에 넣는다.
                document.getElementById("adminAddr").value = extraAddr;
            
            } else {
                document.getElementById("adminAddr").value = '';
            }
            document.getElementById("adminAddr").value = addr + " ";
            document.getElementById("adminAddr").focus();
        }
    }).open();
}

    $(function(){
        var flag = false; 
        var idconfirm = "";

		$('#checkId').click(function() {
			var formData = $("#managerForm").serialize(); //managerForm의 값들을 직렬화 하여 변수에 할당
			var adminId = $('#adminId').val();
			$.ajax({
				url:"/managers/checkId",
				type:'POST',
				data: formData,
				success:function(data){
					if(data == "success" && adminId != ""){ //Controller에서 Success 반환
						alert("사용 가능한 아이디 입니다.");
						flag = true;
						idconfirm = $('#adminId').val();
					} else {
						alert("사용 불가능한 아이디 입니다. 다른 아이디를 입력해주세요.");
						flag = false;
						idconfirm = $('#adminId').val();
					}
				},
			    error:function(request,status,error){
			         alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
			    }
			});
		})
		
		function checkKor(str) { 
			const regExp = /^[ㄱ-ㅎㅏ-ㅣ가-힣]/g;
			if(regExp.test(str)){ 
				return true; 
			}else{ 
				return false;
			}
		}


        
        function idRegex(value) {
            var chk1 = /^[a-zA-Z0-9]/g;
			var chk2 = /[a-zA-Z]/g;
			var chk3 = /[0-9]/g;
			return chk1.test(value) && chk2.test(value) && chk3.test(value);
		}

    		// 특수 문자가 있나 없나 체크
    	function checkSpecial(str) {
        	var check_kor = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/; // 한글체크
            if(check_kor.test(str) == true) {
            	return true;
             } else {
        	    return false;
             }
    	};

        
		 



		function strCheck(str, type) {    
		    var REGEX = {
		        ID_RULE: /^[a-z]+[a-zA-Z0-9]{5,19}$/g, //	현재 미사용.영소문자로 시작, 대문자, 숫자 포함 가능
		        EMAIL: /\S+@\S+\.\S+/,        			//	현재 미사용
		        PWD_RULE: /^(?=.*[a-zA-Z])((?=.*\d)(?=.*\W)).{8,20}$/, // 사용중: 비밀번호        
		        NAME_RULE: /^[가-힣a-zA-Z]+$/				//	현재 미사용
		    };

		    if (type === "email") {        
		        return REGEX.EMAIL.test(str);    
		    } else if (type === "pwd") {        
		        return REGEX.PWD_RULE.test(str);    
		    } else if (type === "name") {        
		        return REGEX.NAME_RULE.test(str);    
		    } else if(type === "id") {
		        return REGEX.ID_RULE.test(str);
		    }else {        
		        return false;
		    }
		}

		

		function pwdCheck(str) {    
		    var REGEX = {
		        PWD_RULE: /^(?=.*[a-zA-Z])((?=.*\d)(?=.*\W)).{8,20}$/,        
		    };
	        return REGEX.PWD_RULE.test(str);    
		}
		

 
		var testPwd = "akstp!2020did"
		console.log("testPwd=", testPwd);
		console.log("### testPwd_check=", pwdCheck(testPwd));		


 
        $.validator.setDefaults({
            onkeyup:false,
            onclick:false,
            onfocusout:false,
            showErrors:function(errorMap, errorList){
                if(this.numberOfInvalids()) {
                    alert(errorList[0].message);
                }
            }
        });


        
		$("#managerForm").validate({
		    rules: {
		    	"adminId" : {
		    		required : true,
		    		minlength: 6
		    	},
		    	"adminPwd" : {
		    		required : true,
		    		minlength: 9,
		    		
		    	},
		    	"adminPwdRe" : {
		    		required : true,
		    		minlength: 9,
		    		equalTo: "#adminPwd"
		    	},
		    	"adminName" : {
		    		required : true
		    	},
		    	"adminType" : {
		    		required : true
		    	},
		    	"useYn" : {
		    		required : true
		    	}
		    },
		    messages: {
		    	"adminId": {
	                required: "아이디를 입력해주세요.",
	                minlength: $.validator.format('아이디는 최소 {0}글자 이상 입력해주세요.')
	                
	            },
		    	"adminPwd": {
	                required: "비밀번호를 입력해주세요.",
	                minlength: $.validator.format('비밀번호는 최소 {0}글자 이상 입력해주세요.')
	            },
		    	"adminPwdRe": {
	                required: "비밀번호 확인을 입력해주세요.",
	                minlength: $.validator.format('비밀번호는 최소 {0}글자 이상 입력해주세요.###'),
	                equalTo: "비밀번호가 일치하지 않습니다."
		        },
	            "adminName": {
	                required: "이름을 입력해주세요."
	            },
	            "adminType": {
	                required: "권한을 선택해주세요."
	            },
	            "useYn": {
	                required: "사용여부를 선택해주세요."     
	            }
		    },
		    submitHandler: function(form){ //보내려는 form에 action이 되어 있는지 확인할 것. 우선순위 때문에 동작하지 않을 수 있음.

				alert("submitHandler 동작")

 				var adminID = $('#adminId').val(); //Id가 아니라 ID임 
				var adminPwd = $('#adminPwd').val(); 

				console.log("###adminId={}", adminID);
				console.log("###adminPwd={}", adminPwd);
				alert(adminID)
				alert(adminPwd)
				
				alert("멈춤")
		
 
				if(!idRegex(adminID)){ //ID,id 확인. // 영문,숫자조합6자이상이 아니면 alert
					alert('ID는 영문과 숫자 조합 6자 이상이어야 합니다.');
					return false;
				};

				console.log("###idRegex 밑");
				alert("Idregex 밑")
				
				

				if(checkSpecial(adminID)){
					console.log("checkSpecial==adminID");
					alert('ID오류: ID는 영문과 숫자 조합 6자 이상이어야 합니다.');
					return false;
				};


				if(!pwdCheck(adminPwd)) {
					console.log("strCheckPwd === false");
					alert("pwd 오류:비밀번호 생성기준에 일치하지 않습니다.");
					return false;
				}
				
				

				if(checkSpecial(adminPwd)){
					console.log("checkSpecial");
					alert('비밀번호 생성기준에 일치하지 않습니다.');
					return false;
				};

				console.log("###checkSpecial 밑");
				alert("checkSpecial 밑")
				
				
				
				
				//strCheck: id, pwd 검증 
				
				var strCheckId = strCheck(adminID, "id");
				var strCheckPwd = strCheck(adminPwd,"pwd");

				console.log("strCheckId=", strCheckId);
				console.log("strCheckPwd=", strCheckPwd);
				alert(strCheckId);
				alert(strCheckPwd);				

				if(strCheckId === false) {
					console.log("strCheckId === false");
					alert("id오류");
					return false;
				}

				if(strCheckPwd === false) {
					console.log("strCheckPwd === false");
					alert("pwd 오류");
					return false;
				}
	
				

				if($('#button').text()== '등록'){
					alert(flag);
					if (flag && adminID == idconfirm) {
	        			if(confirm('관리자 등록을 하시겠습니까?')){
		        			return true;
		           	 	}else{
							return false;
		            	}
	           	 	}else{
	            		alert("아이디 중복확인을 클릭해주세요.");
						return false;
	            	}
				}else{
					if(confirm('내용을 수정하시겠습니까?')){
						return true;
					}else{
						return false;
					}
				}

				//managers로 리다이렉트 필요

				
			}//submitHandler/
		});
    });
</script>

 

 

일자 조회 정규식. 공백, 또는 정규식이 아니면 오류 발생

 

	$('#didForm').submit(function(event){
			if($(document.activeElement).text() == 'Excel 다운로드'){
				if("${firstSearch}" != null && "${firstSearch}" == "ok"){
					$('#didForm').attr("action","/did/downloadExcelFile${queryString}");
					//엑셀 체크값 설정
					var didSeqs = "";
					$('.exlChk:checked').each(function(){
						didSeqs += $(this).parent().parent().children().eq(0).val() + ",";
					});
					$('#didSeqs').val(didSeqs);
					return true;
				}else{
					if($('.exlChk:checked').length > 0){
						$('#didForm').attr("action","/did/downloadExcelFile${queryString}");
						//엑셀 체크값 설정
						var didSeqs = "";
						$('.exlChk:checked').each(function(){
							didSeqs += $(this).parent().parent().children().eq(0).val() + ",";
						});
						$('#didSeqs').val(didSeqs);
						return true;
					}else{
						alert("먼저 검색을 진행하거나 다운로드 받을 항목을 선택해주세요.");
						return false;
					}
				}
			}else if($(document.activeElement).text() == '검색'){

				//검색 일자 형식 검증
				var regStartDate = $('#regStartDate').val();
				var regEndDate = $('#regEndDate').val();
				var dateRegex = RegExp(/^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/);

				if(!(regStartDate=="" || dateRegex.test(regStartDate) == true) || !(regEndDate=="" || dateRegex.test(regEndDate) == true)) {
					//입력 일자가 공백, 또는 형식에 맞지 않다면 아래의 경고 출력
					alert('올바른 일자 형식을 사용해주세요. \n\n예) 2030-08-15 또는 공백');
					return false;
				}


				
				$('#pageNo').val('1');
				$('#didForm').attr("action","/did${queryString}");
			}
		});

 

'Language > Javascript' 카테고리의 다른 글

이벤트 루프와 비동기 통신  (0) 2024.01.03
클로저(closure)  (0) 2024.01.03
자바스크립트 클래스  (0) 2024.01.01
함수 관련  (0) 2023.12.31
자바스크립트의 타입과 동등비교  (1) 2023.12.29
Comments