정규표현식이란?
정규표현식이란 특정 패턴의 문자열을 찾기 위한 표현 방식으로, 잘 이용하면 Javascript를 이용한 검증 과정을 보다 간단하게 만들 수 있다. 가장 간단하게 접근할 수 있는 test 메소드를 이용한 정규표현식 검증부터 살펴보자.
정규표현식 만들기
정규표현식은 두 개의 슬래쉬( / ) 안에 입력한다.
휴대폰 번호를 검증하는 정규표현식 예시를 통해 기본 형태를 살펴보자.
const re = /010-\d{3,4}-\d{4}/
// \d{3,4}는 3글자이거나 4글자인 숫자, \d{4}는 네글자인 숫자를 의미한다.
re.test("010-9123-4567") // true
위의 정규 표현식은 대상 객체가 010-{3~4글자의 숫자}-{4글자의 숫자}로 이루어져있으면 true를 반환한다.
요즘은 휴대폰 번호 맨 앞자리가 4글자로 되어있는 안심번호 서비스를 이용하는 사용자들도 있기 때문에, 해당 경우까지 포함하여 표현식을 수정해보자.
const re = /\d{3,4}-\d{3,4}-\d{4}/
re.test('0505-1234-1234') // Case 1. true
re.test('010-1234-1234') // Case 2. true
re.test('제 번호는 010-1111-1111 입니다') // Case 3. true
Case 3을 보자. 위와 같은 형태의 정규표현식은 해당 텍스트가 대상 문자열 안에 포함되어 있기만 하면 true를 반환한다. 좀 더 엄격하게 검증하기 위해서는 어떻게 해야할까?
const re = /^\d{3,4}-\d{3,4}-\d{4}$/
re.test('010-1234-1234') // true
re.test('제 번호는 010-1234-1234 입니다.') // false
^ 와 $ 기호를 사용해서 문자열의 시작과 끝을 지정해주면 좀 더 엄격하게 대상 문자열을 검증할 수 있다.
정규표현식 용어
정규표현식에 들어가는 용어들을 하나하나 다 외우기는 어렵다. 필요할 때마다 찾아볼 것.
자주 쓰이는 용어는 다음과 같다.
정규표현식 매칭 패턴 (문자, 숫자, 기호 등)
패턴 | 의미 |
a-zA-Z | 영어 알파벳 (-으로 범위 지정, 대문자 소문자 각각 지정 가능) |
ㄱ-ㅎ가-힣 | 한글 문자 (-으로 범위 지정) |
0-9 | 숫자 (-으로 범위 지정) |
. | 모든 문자열 (숫자, 한글, 영어, 특수기호, 공백 모두 포함 / 줄바꿈 x) |
\d | 숫자 |
\D | 숫자가 아닌 것 |
\w | 영어 알파벳, 숫자, 언더스코어(_) |
\W | \w가 아닌 것 |
\s | space 공백 |
\S | space 공백이 아닌 것 |
\특수기호 | 해당 특수기호 (예시: \.) |
정규표현식 검색 패턴
패턴 | 의미 |
| | OR |
[] | 괄호 안의 문자들 중 하나 |
[^문자] | 괄호 안의 문자를 제외한 것 |
^문자열 | 특정 문자열로 시작 |
문자열$ | 특정 문자열로 끝남 |
(x) | 그룹 및 분류. x를 그룹으로 처리한다는 뜻 |
(x)(y) | 그룹들의 집합. x와 y는 각 그룹의 데이터로 취급한다. |
(x)(?:y) | 그룹들의 집합에 대한 예외. |
\b | 단어의 처음/끝 |
\B | 단어의 처음/끝이 아님 |
정규표현식 갯수(수량) 패턴
패턴 | 의미 |
? | 최대 한 번 (없음 or 한 개) |
* | 없거나 있거나 (없음 or 있음) : 여러 개 있는 경우 포함 |
+ | 최소 한 개 (한 개 or 여러 개) |
{n} | n개 |
{Min,} | Min개 이상 |
{Min, Max} | Min개 이상, Max개 이하 |
참고 링크
https://curryyou.tistory.com/234
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions
'Javascript' 카테고리의 다른 글
[Javascript ] substr() / substring() - 문자열 자르기 (0) | 2022.03.03 |
---|---|
[Javascript] Array.reverse() - 배열 순서 반전 (0) | 2022.02.14 |
[Javascript] Object.keys() / Object.values() / Object.entries() / Object.assign() (0) | 2022.02.14 |
[Javascript] Spread Operator - 스프레드 연산자, 전개 구문 (0) | 2022.02.09 |
[Javascript] 알파벳 대소문자 변환 - toUpperCase() / toLowerCare() (0) | 2022.02.05 |