정규표현식 연습: 회원가입 페이지 만들기

Ji Hyeok Im·2023년 3월 8일
0

Javascript

목록 보기
15/17
post-thumbnail

사용자의 입력을 받아 입력된 값이 각 양식에 적합한지 정규표현식으로 검증하는 패턴을 만드려고 한다.

1. 아이디 검증

아이디 양식은 다음과 같다.

1) 아이디는 영문 대/소문자, 숫자, 언더스코어(_)가 들어갈 수 있다.

2) 숫자는 아이디 첫 글자로 올 수 없다.

3) 아이디의 글자 수는 최소 5글자, 최대 20글자까지 가능하다.

아이디의 첫 글자로 숫자를 제외한 영문 대/소문자, 숫자, 언더스코어가 올 수 있으므로

이를 정규표현식으로 표현하면 다음과 같다.

/^[A-Za-z_]/

아이디의 두번째 글자부터는 영문 대/소문자, 숫자, 언더스코어가 올 수 있다.

/[A-Za-z0-9_]/

글자수가 5 ~ 20이고, 첫 글자를 제외한 두번째 글자에서부터 마지막 글자까지의 글자 수는 4 ~ 19 자이다.

위를 종합해 완성된 아이디의 정규표현식 패턴을 변수 midReg에 담으면 다음과 같다.

var midReg = /^[A-Za-z_][A-Za-z0-9_]{4,19}$/;

2. 주민등록번호 검증

1) 주민등록번호 앞자리

주민등록번호 앞자리는 YYMMDD의 6글자로 이루어진다.

  • YY는 연도로 00 ~ 99까지 모든 숫자가 올 수 있다.

/^[0-9]{2}/

  • MM은 월 로 01 ~ 12까지 가능하다.
    0 다음 1-9가 오거나 또는 1 다음 0-2가 올 수 있다.

/(0[1-9]|1[0-2])/

  • DD은 일 로 01 ~ 31까지 가능하다.
    0 다음 1-9 또는 1 or 2 다음 0-9 또는 3 다음 0 or 1이 올 수 있다.

/(0[1-9]|[12][0-9]|3[01])$/

위를 종합해 완성된 주민등록번호 앞자리에 대한 정규표현식 패턴을 변수 jumin1Reg에 담으면 다음과 같다.

var jumin1Reg = /^[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$/;

2) 주민등록번호 뒷자리

개인정보보호법 상 회원가입시 수집할 수 있는 주민등록번호 뒷자리는 성별분류인 제일 앞자리 1자리 이므로

이에 대한 정규표현식 패턴을 만들면 다음과 같다.

var jumin2Reg = /^[1-8]$/;

3. 이메일 검증

이메일주소는 로컬파트 @와 도메인으로 나뉘어진다.

  • 로컬파트 형식

    5 ~ 20글자
    영문 대/소문자, 숫자, 특수기호 !#$_ 가능
    숫자, 특수기호로 시작하면 안됨

  • 도메인 형식

    xxxx.xxx 또는 xxxx.xx.xx
    영문 대/소문자, 숫자만 가능, 모든 특수기호 불가

1) 로컬파트 패턴

시작값은 영문 대소문자만 가능하며 글자수는 첫 글자를 빼고 나머지 글자수가 4~19 글자면 되므로

/^[A-Za-z][A-Za-z0-9!#$_]{4,19}@/

와 같이 작성할 수 있다.

2) 도메인 패턴

영문 대/소문자, 숫자만 가능하고

형식은 xxxx.xxx 또는 xxxx.xxx(.xx) : ( )안의 부분은 있을 수도 없을 수도 있다.

즉 ( )은 (.[xx]+)? 로 표현 가능하다.

위를 종합해 도메인 패턴을 정규표현식으로 만들면 다음과 같다.

/[A-Za-z0-9]+.[A-Za-z0-9]+(.[A-Za-z0-9]+)?/

완성된 이메일 패턴을 변수 myEmailReg에 담으면 다음과 같다.

var myEmailReg = /^[A-Za-z][A-Za-z0-9!#$_]{4,19}@[A-Za-z0-9]+.[A-Za-z0-9]+(.[A-Za-z0-9]+)?$/;

4. 전화번호 검증

전화번호 형식은 A-B-C 형식으로 가정하고, 지역번호마다 마지막 숫자는 1-5로 가정한다.

1) A파트

A파트에 올 수 있는 숫자는

010, 001의 무선전화용 식별번호와 지역번호 02, 0(3~6)(1~5)를 고려해야 한다.

첫 자리 숫자는 0으로 고정되고

두번째 자리 숫자는 1일 때 0 or 1 , 2일때 없음, 3~6일때 1~5 가 올 수 있다.

위를 정규표현식으로 만들면

/^0(1[01]|2|[3-6][1-5])/

2) B파트

첫 자리 숫자는 0이 올 수 없으므로 [1-9]

두번째~네번째 숫자는 0-9이고 네번째 숫자는 없을 수도 있다.

/[1-9][0-9]{2,3}/

3) C파트

모든 숫자가 올 수 있지만 글자수는 4로 고정이다.

/[0-9]{4}/

각 파트는 - 패턴으로 구분된다.

var myTelReg = /^0(1[01]|2|[3-6][1-5])-[1-9][0-9]{2,3}-[0-9]{4}$/;

5. 패스워드 검증

패스워드로 쓸 수 있는 숫자는 영문 대/소문자, 숫자, @$!%*?& 중의 특수문자로 가정하고

패스워드의 길이는 최소 8글자, 최대 30글자로 가정한다.

또한 안전성 담보를 위해 대문자, 소문자, 숫자, 특수문자는 각각 한번 이상씩 쓰여야 한다.

쓸 수 있는 문자 집합을 [A-Za-z\d@$!%*?&] 로 놓고,

?= 기호를 사용해 문자 집합을 참조해 각 문자들이 한번씩 쓰이는지 검증한다.

대문자가 쓰이는지 검증하는 방법은 다음과 같다.

/(?=.*[A-Z]/

. 은 모든 문자를 의미한다. 즉 모든 문자가 0회 이상 나온 다음 대문자가 적어도 하나는 나와야한다는 뜻이다.

이를 다른 문자에도 적용해 완성된 패스워드 패턴은 다음과 같다.

var mpwReg = /^(?=.[A-Z])(?=.[a-z])(?=.\d)(?=.[@$!%*?&])[A-Za-z\d@$!%*?&]{8,30}$/;

profile
Programming study

0개의 댓글