[Regexr] 정규식 정리

Sungho Kim·2022년 9월 26일
0

사이드프로젝트

목록 보기
2/5
post-thumbnail

왜 정규식을 쓰는걸까?

개발을 하다보면 꽤나 많이 데이터를 가공해서 저장을 하게 되는데, 그럴때 유용한게 바로 regular expression(정규식)이다. 예를들어, 어떤 기업에서는 전화번호를 010-xxxx-xxxx식으로 저장할것이고, 어떤 기업에서는 +82 10-xxxx-xxxx식으로 저장되어 있을것이다.

하지만 자사의 DB는 이미 11자리 숫자(예:010xxxxxxxx)로 저장이 되어있고, 이걸 통합해야할 경우, 유용한게 정규식이다.

또, 유저로부터 정보를 받아올때 이메일만 입력받고 싶은 경우, 주민번호 유효성을 검사할때 등 미리 알아두면

function replace(string) {
	const withOutDash = string.replace("-","")
    const withOutContryNumber = withOutDash.replace("+82 ", "")
    return withOutCountryNumber
}

같은 무한 replace를 안써도 된다.

쓰는 방법

Anchors : ^ and $

^The			The로 시작하는 모든 문자열을 매칭
end$			end로 끝나는 문자열과 매칭
abc				abc가 들어있는 모든 문자열과 매칭

Quantifiers : *+?and{}

abc* 			ab 그리고 0개 이상의 c 를 포핳한 문자열과 매칭
abc+			ab 그리고 1개 이상의 c 를 포함한 문자열과 매칭
abc?			ab 그리고 0개 또는 1개의 c를 포함한 문자열과 매칭
abc{2}			ab 그리고 2개의 c를 포함한 문자열과 매칭
abc{2,5}		ab 그리고 2개 이상 5개 이하의 c를 포함한 문자열과 매칭
a(bc)*			a 그리고 0개 이상의 bc를 포함한 문자열과 매칭
a(bc){2,5} 		a 그리고 2개 이상 5개 이하의 bc를 포함한 문자열과 매칭

OR operator : | or []

a(b|c)			a 그리고 b 또는 c를 포함한 문자열과 매칭
a[bc]			위와 동일

Character classes : \d \w \s

\d				숫자 하나와 매칭
\w				문자 하나와 매칭
\s				공백문자 하나와 매칭
.				모든 문자 하나와 매칭

Grouping and Captureing : ()

a(bc)			소괄호는 캡쳐 그룹을 생성

Bracket Exppression : []

[abc]			a 또는 b 또는 c를 포함하는 문자열과 매칭
[a-c]			위와 동일
[a-zA-Z0-9]		영문과 숫자 하나와 매칭하고, 대소문자를 구분하지 않음

많이 사용하게 되는 예제

핸드폰 정규식
const regExp = /^\d{3}-\d{3,4}-\d{4}$/; 	

일반번호 정규식
const regExp = /^\d{2,3}-\d{3,4}-\d{4}$/;	

이메일 정규식
const regExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;

비밀번호 정규식 (특수문자 / 문자 / 숫자 포함 형태의 8~15자리 이내의 암호)
const regex = /^.*(?=^.{8,15}$)(?=.*\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$/;

비밀번호 정규식 (숫자와 문자 포함 형태의 6~12자리 이내의 암호)
const regex = /^[A-Za-z0-9]{6,12}$/;

한글만 정규식 (ㄱ,ㄴ,ㄷ,ㄹ,ㅁ 이런건 제외)
const regex = /^[가-힣]+$/

모든 한글 정규식 (ㄱ,ㄴ,ㄷ,ㄹ 가능)
const regex = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/;

영어만 정규식
const regex = /^[a-zA-Z]+$/

URL 정규식
const regex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#()?&//=]*)/ 

숫자만 정규식
const regExp = /[0-9]/g;

특수문자 정규식
const regExp = /[\{\}\[\]\/?.,;:|\)*~`!^\-_+<>@\#$%&\\\=\(\'\"]/g;

모든 공백 체크 정규식
const regExp = /\s/g;

해석을 통한 예제

핸드폰 정규식

const regExp = /^\d{3}-\d{3,4}-\d{4}$/; 

^: 시작하는
\d: 숫자로
{3}: 3개의
"-": -가 들어가고
\d: 숫자를 포함한
{3,4}: 3~4개의
"-": -가 들어가고
\d : 숫자
{4} : 4자리
$ : 로 끝나는

해당 조건을 충족하는 문자열을 반환하는 정규식

이메일 정규식

const regExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i;

^[0-9a-zA-Z] 	: 숫자나 대소문자를 포함한 문자열과
(				: 문자열 시작
[-_.]?			: 0개나 1개의 -,_을 포함한
[0-9a-zA-Z]		: 숫자나 대소문자를 포함한 문자열
)				: 문자열 끝 
*				: 0개 이상의 문자열
"@"				: @를 포함

이게 두번 반복되고,
[a-zA-Z]{2,3}	: 대소문자 2 ~ 3개를 포함

해당 조건을 충족하는 정규식

정리하자면,

당연하겠지만, 이미 자주 쓰는 정규식은 웹 서치를 통해서 쉽게 찾을 수 있다. 하지만 웹 스크래핑을 할 경우, 데이터가 내가 원하는대로 가공되어 있는 경우는 찾기가 거의 힘들다. 그럴때마다 내가 원하는 형식의 데이터로 저장을 하고 싶은 경우 굉장히 유용한게 정규식이다.

profile
공유하고 나누는걸 좋아하는 개발자

0개의 댓글