프로젝트를 진행하며 이미지 업로드 기능을 구현하던 도중 content type을 판단해서 이미지만 업로드 가능하게 만들어야 했다.
따라서, 원래는 contentType이
"image/" + "jpeg|png|..."
이런 식으로 구현하려 했으나 이것보다 어차피 image/ 뒤에 아무것이나 와도 되게하면 됐기에 정규표현식으로 만들기로 했다.
내가 설정한 것은
(^image)(/)\\w*
이다.
아래는 정규표현식으로의 여러 기능들을 표 형식으로 정리해둔 것이다. 그때그때 꺼내먹어요.
기본 기능
표현식 | 의미 |
---|---|
^x | 문자열의 시작을 표현하며 x 문자로 시작됨을 의미한다. |
x$ | 문자열의 종료를 표현하며 x 문자로 종료됨을 의미한다. |
.x | 임의의 한 문자의 자리수를 표현하며 문자열이 x 로 끝난다는 것을 의미한다. |
x+ | 반복을 표현하며 x 문자가 한번 이상 반복됨을 의미한다. |
x? | 존재여부를 표현하며 x 문자가 존재할 수도, 존재하지 않을 수도 있음을 의미한다. |
x* | 반복여부를 표현하며 x 문자가 0번 또는 그 이상 반복됨을 의미한다. |
x|y | or 를 표현하며 x 또는 y 문자가 존재함을 의미한다. |
(x) | 그룹을 표현하며 x 를 그룹으로 처리함을 의미한다. |
(x)(y) | 그룹들의 집합을 표현하며 앞에서 부터 순서대로 번호를 부여하여 관리하고 x, y 는 각 그룹의 데이터로 관리된다. |
(x)(?:y) | 그룹들의 집합에 대한 예외를 표현하며 그룹 집합으로 관리되지 않음을 의미한다. |
x{n} | 반복을 표현하며 x 문자가 n번 반복됨을 의미한다. |
x{n,} | 반복을 표현하며 x 문자가 n번 이상 반복됨을 의미한다. |
x{n,m} | 반복을 표현하며 x 문자가 최소 n번 이상 최대 m 번 이하로 반복됨을 의미한다. |
추가 기능
표현식 | 의미 |
---|---|
[xy] | 문자 선택을 표현하며 x 와 y 중에 하나를 의미한다. |
[^xy] | not 을 표현하며 x 및 y 를 제외한 문자를 의미한다. |
[x-z] | range를 표현하며 x ~ z 사이의 문자를 의미한다. |
\\^ | escape 를 표현하며 ^ 를 문자로 사용함을 의미한다. |
\\b | word boundary를 표현하며 문자와 공백사이의 문자를 의미한다. |
\\B | non word boundary를 표현하며 문자와 공백사이가 아닌 문자를 의미한다. |
\\d | digit 를 표현하며 숫자를 의미한다. |
\\D | non digit 를 표현하며 숫자가 아닌 것을 의미한다. |
\\s | space 를 표현하며 공백 문자를 의미한다. |
\\S | non space를 표현하며 공백 문자가 아닌 것을 의미한다. |
\\t | tab 을 표현하며 탭 문자를 의미한다. |
\\v | vertical tab을 표현하며 수직 탭(?) 문자를 의미한다. |
\\w | word 를 표현하며 알파벳 + 숫자 + _ 중의 한 문자임을 의미한다. |
\\W | non word를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미한다. |
Flag로 처리
Flag | 의미 |
---|---|
g | Global 의 표현하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미한다. |
i | Ignore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미한다. |
m | Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미한다. |
예제
정규 표현식 | 설명 |
---|---|
^[0-9]*$ | 숫자 |
^[a-zA-Z]*$ | 영문자 |
^[가-힣]*$ | 한글 |
\\w+@\\w+\\.\\w+(\\.\\w+)? | 이메일 |
^\\d{2,3}-\\d{3,4}-\\d{4}$ | 전화번호 |
^010-\\d{4}-\\d{4}$ | 휴대전화번호 |
\\d{6}\\-[1-4]\\d{6} | 주민등록번호 |
- 위의 이메일의 경우, co.kr과 같은 경우를 위해 (\\.\\w+)? 가 추가되었다.