상세 컨텐츠

본문 제목

정규표현식(모든언어에 해당됨)

기타정보

by 김일국 2021. 6. 13. 12:15

본문

프로그램개발에서 가장 중요한 것은 데이터 변수값의 흐름입니다.

이것을 파악하면, 그 종류가 무엇이 되었든(jsp,자바,SQL쿼리,python 등) 개발이 가능하게 됩니다.

데이터의 변수값을 체크하는 것은 유효성 검사라고 하고, 아래와 같은 정규표현식(regExp)를 이용합니다.

여기서도 중요한 것은 regExp를 사용한 데이터 변수값이 중요합니다.

(수업에서는 데이터 입력시 악성코드를 찾아서 무력화 시키셔 저장하기 와 겔러리의 이미지 업로드,다운로드시 파일이 이미지 파일인지 데이터 변수값을 검사할때 적용할 예정 입니다.)

 

오라클 사용자 추가 후 웹 관리자로 로그인 시 암호를 신규지정 할때 rules 암호 규칙이 나오게 됩니다.

만약 개발자입장에서 암호 생성 규칙을 지정할때 사용하는 규칙을 정규 표현식(Regular Expression)이라고 입니다.

오라클 웹 관리자 암호 생성 규칙은 아래와 같습니다.
- 암호는 최소 10자 이상 20자 이하로

- 숫자가 1개 이상 포함, 특수문자도 1개이상 포함,소문자 1개이상 포함, 대문자 1개이상 포함

- 아래는 위 조건을 만족한느 정규표현식입니다.

^(?=.*\d{1,})(?=.*[!"#$%&()``*+,-/:;<=>?_]{1,})(?=.*[a-z]{1,})(?=.*[A-Z]{1,}).{10,13}$

- 위 정규표현식에 사용된 기호설명

- 표현식 시작과 끝:  ^(시작), $(끝)

- 표현식 조건을 그룹화시킬때 : (표현식1)(표현식2)

- 표현식 이스케이프문자: \(역슬래시) 구문문자(데이터문자가 아님)

- 데이터문자크기: (괄호안데이터의 1글자)?, (괄호안데이터의 모든문자)*

- 데이터영역기호: .(전체영역), [대괄호] bracket 데이터영역

- 조건 영역: \d{숫자-개수조건} , [데이터영역]{문자-개수조건}, .{전체영역-개수조건}

위 표현식을 다이어그램으로 확인 ( https://regexper.com/ ) 아래 미리보기

위 표현식을 우리가 지정한 오라클 웹 관리프로그램 admin 암호로 확인하기 ( https://regexr.com/ ) 아래미리보기

 

Ps. 외부 모듈 사용하지 않고, 자바스크립트에서 정규식으로 유효성 검사할때 아래처럼 입력값을 제한 할 수 있습니다.

단, 스프링 프로젝트에서는 외부 모듈 jquery.validate.js 코어를 사용합니다.

...

// id 체크 정규식 : 숫자, 영문만 입력 가능
var idRules = /^[0-9a-z]{10,15}$/;
// 비밀번호 규칙 정규식
// : 숫자, 특문 각 1회 이상, 영문은 2개 이상 사용하여 전체 8자리 이상 입력
var passwordRules = /(?=.*\d{1,50})(?=.*[~`!@#$%\^&*()-+=]{1,50})(?=.*[a-zA-Z]{2,50}).{8,50}$/;
// 이메일주소 형식 체크 정규식
var emailRules = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i;

//사용예
var user_id = 'user_id1';
//console.log(idRules.test(user_id));
if(!passwordRules.test(password)){
alert('숫자와 영문자 조합으로 10~15자리를 사용해야 합니다.');
return false;
}
var password = 'password1';
//console.log(passwordRules.test(password));
if(!passwordRules.test(password)){
alert('숫자, 특문 각 1회 이상, 영문은 2개 이상 사용하여 전체 8자리 이상 입력해야 합니다.');
return false;
}

...

- 소문자 전용에 대한 실제 코딩 예

<script src="https://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function(){
    $('#capsLockTest').keypress(function(e){
        var keyCode = 0;
        var shiftKey=false;
        keyCode=e.keyCode;
        //shiftKey=e.shiftKey;
        if (keyCode >= 65 && keyCode <= 90)//((keyCode >= 65 && keyCode <= 90)&& !shiftKey)||((keyCode >= 97 && keyCode <= 122)&& shiftKey)
        {
            //alert("CapsLock이 켜져 있습니다");
            $('.alert').remove();
            $(this).after("<DIV class='alert'>CapsLock이 켜져 있습니다</DIV>");
        }
        if(/^[a-z]/.test($(this).val()) && keyCode >= 97 && keyCode <= 122)
        {
            $('.alert').remove();
        }
    });
    //소문자 전용은 위 코드는 필요없이 아래만 있어도 충분 합니다.
    $('#capsLockTest').focusout(function(){
        if(/^[a-zA-z]+$/.test($(this).val()))
        {
            $('.alert').remove();
            $(this).after("<DIV class='alert'>CapsLock이 켜져 있습니다</DIV>");
        }
        if(/^[a-z]+$/.test($(this).val())) {
            $('.alert').remove();
        }
    });
});
</script>
<input type="text" name="capsLockTest" id="capsLockTest" value="">

관련글 더보기

댓글 영역