보안/웹·모바일

특수문자 필터링, 정규표현식 for JavaScript

병뚜 2022. 7. 15. 09:49

특수문자 필터링 for JavaScript

정규표현식 표현방법

1. 정규 표현식 리터럴
const match = /pattern/flag

2. RegExp 호출
const match = new RegExp(pattern)

 

검색패턴

 
[^문자] Not 문자
^문자열 특정 문자열로 시작
문자열$ 특정 문자열로 끝남
| OR
[] 괄호 내 문자열들 중 하나
{} 반복 횟수
() 괄호로 감싼 부분과 일치하는 부분 문자열을 기억. 나중에 불러와서 사용가능.

 

반복패턴

 
? 최대 한번 반복 ( 0 or 1)
* 0회 이상 반복
+ 1회 이상 반복
. 정확히 1개 문자 매칭
{n} N번 반복
{n,} 최소 n번 반복
{n,m} 최소 n번 최대 m번 반복

 

확장문자

 
\s 공백 문자(스페이스,탭, FF, LF)
\S 공백이 아닌 것
\b 단어의 경계
\B 이를 제외한 모든 문자를 매칭한다
\d 숫자
\D 숫자가 아닌 문자 (=[^0-9])
\w =[A-Za-z0-9_]
\W =[^A-Za-z0-9_]
\특문 해당 특수문자를 의미

 

플래그 값 (슬래시 뒤에 지정)

 
g 전역매칭. 해당하는 문자 모두 탐색.
사용하지 않으면 매칭되는 첫문자만
i 대소문자 무시
i 여러 줄 매칭

 

예제로 알아보는 정규표현식

[예제1] 010-1234-5678 전화번호 필터링
구성: 숫자3개 - 숫자4개 - 숫자4개
표현: /\d{3}-\d{4}-\d{4}/
- /abc/ : abc가 있는 문자열
- \d{n} : n은 갯수, \d는 숫자를 의미

 

[예제2] 영어만 입력받는 경우
소문자만 표현: /[a-z]/
대문자만 표현: /[A-Z]/
+) 숫자만 표현: /[0-9]/

 

[예제3] a~z, A~Z, 0~9 사이 모든 문자
표현: /[a-zA-Z0-9]/

 

[예제4] id/pwd 체크. 숫자만 허용, 4~10자리
구성: 시작부터 영어와 숫자만 가능함.
표현: /^[A-Za-z0-9] {4,10}$/

 

[예제5] 한글 필터
표현: /[ㄱ-ㅎ|ㅏ-;|가-힣]/

 

[예제6] 이메일 체크
표현: /[a-z0-9]{2,}@[a-z0-0]{2,}/[a-z0-9]{2,}/i
표현2: /[\w\-\/.]@[\w\-\.]/

 

[예제7] 영문 숫자 조합체크
구성: 영어만 있으면 안됨. 그리고 숫자만 있어도 안됨.
표현: /[^a-z|^0-9]/gi

 

[예제8] 특수문자 제외 2~10글자
표현: /^[\w\Wㄱ-ㅎㅏ-ㅣ가-힣] {2,20}$/

 

RegExp 객체의 메서드

-  test(): 문자열에서 일치하는 부분 탐색. T/F반환

-  exec(): 문자열에서 일치하는 부분 탐색. 해당 부분 배열로 반환

 

String 객체의 메서드

-  match(): 문자열에서 모든 일치하는 부분들 탐색. 해당 부분들 배열로 반환

-  replace(): 매칭되는 부분을 대체 문자열로 변환

-  search(): 탐색 후 일치하는 부분의 인덱스 반환

-  split(): 문자열을 매칭되는 부분으로 쪼개서 배열로 반환