사용자의 입력을 받아 입력된 값이 각 양식에 적합한지 정규표현식으로 검증하는 패턴을 만드려고 한다.
아이디 양식은 다음과 같다.
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}$/;
주민등록번호 앞자리는 YYMMDD의 6글자로 이루어진다.
/^[0-9]{2}/
/(0[1-9]|1[0-2])/
/(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])$/;
개인정보보호법 상 회원가입시 수집할 수 있는 주민등록번호 뒷자리는 성별분류인 제일 앞자리 1자리 이므로
이에 대한 정규표현식 패턴을 만들면 다음과 같다.
var jumin2Reg = /^[1-8]$/;
이메일주소는 로컬파트 @와 도메인으로 나뉘어진다.
로컬파트 형식
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]+)?$/;
전화번호 형식은 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}$/;
패스워드로 쓸 수 있는 숫자는 영문 대/소문자, 숫자, @$!%*?& 중의 특수문자로 가정하고
패스워드의 길이는 최소 8글자, 최대 30글자로 가정한다.
또한 안전성 담보를 위해 대문자, 소문자, 숫자, 특수문자는 각각 한번 이상씩 쓰여야 한다.
쓸 수 있는 문자 집합을 [A-Za-z\d@$!%*?&] 로 놓고,
?= 기호를 사용해 문자 집합을 참조해 각 문자들이 한번씩 쓰이는지 검증한다.
대문자가 쓰이는지 검증하는 방법은 다음과 같다.
/(?=.*[A-Z]/
. 은 모든 문자를 의미한다. 즉 모든 문자가 0회 이상 나온 다음 대문자가 적어도 하나는 나와야한다는 뜻이다.
이를 다른 문자에도 적용해 완성된 패스워드 패턴은 다음과 같다.
var mpwReg = /^(?=.[A-Z])(?=.[a-z])(?=.\d)(?=.[@$!%*?&])[A-Za-z\d@$!%*?&]{8,30}$/;