01
정규표현식 (Regular expression)
정규표현식이란 일정한 패턴(특정한 규칙)을 가진 문자열의 집합을 다루는 데 사용하는 형식언어(formal language)입니다. 자바스크립트 고유의 문법이 아닌 다양한 프로그래밍 언어에 지원되고 있습니다.
왜 사용하나요?
텍스트 데이터를 효율적으로 사용하기 위해서는 필요한 텍스트와 불필요한 텍스트를 구분해야 합니다.
컴퓨터 입장에서는 모든 문자가 동일하기 때문에 필요/불필요를 가려낼 수 없습니다.
그렇기에 사람이 자세하게 '00 형식,ㅁㅁ규칙을 가진 텍스트를 골라줘'라고 명령을 내려줘야 컴퓨터가 수행합니다.
예를 들어 한국의 주민등록번호는 '990101-1234567' 라는 고정된 규칙을 사용하고 있습니다.
여기서 뒷자리 7개의 숫자 중 첫 숫자가 5~8 사이면 외국인의 주민등록번호입니다. 외국인의 주민등록 번호는 찾으려면 뒷자리숫자 중 첫자리가 5~8 사이인지 체크하는 것으로 원하는 결과를 찾을 수 있습니다.
이외에도 모든 텍스트에는 규칙이 존재합니다. 이러한 규칙을 활용하여 컴퓨터가 개발자들이 원하는 문자열의 집합을 찾게 하는 것이 정규표현식의 존재 이유입니다.
RegExp
아래와 같이 정규표현식 리터럴은 패턴(pattern)과 플래그(flag)로 구성되어 있습니다.
메서드
- exec : 첫 번째 결과에 대해서만 매칭결과를 배열로 반환합니다. 매칭결과가 없는 경우 null을 반환합니다.
const target = "Is this all there is?";
const regExp = /is/;
regExp.exec(target);
//결과=> ['is', index: 5, input: 'Is this all there is?', groups: undefined]
- test : 매칭결과를 boolean값으로 반환합니다.
const target = "Is this all there is?";
const regExp = /is/;
regExp.test(target);
//결과=> true
- match : 매칭결과를 배열로 반환합니다.
const target = "Is this all there is?";
const regExp = /is/;
target.match(regExp);
//결과=> ['is', index: 5, input: 'Is this all there is?', groups: undefined]
*exec메서드와 비슷하지만 match메서드는 g플래그가 지정되면 모든 매칭결과를 배열로 반환합니다.
const target = "Is this all there is?";
const regExp = /is/g;
target.match(regExp);
//결과=> ['is', 'is']
플래그
정규표현식의 검색 방식을 설정하기 위해 사용합니다. 총 6개가 존재하지만 중요한 3개만 나열하겠습니다.
- i : Ignore case / 대소문자를 구별하지 않습니다. default
- g : global / 일치하는 모든 문자열을 전역 검색합니다.
- m : multi line / 문자열의 행이 바뀌더라도 검색을 계속합니다.
패턴
문자열의 일정한 규칙을 표현하기 위해 사용됩니다. 정규표현방식을 설정하기 위해 사용됩니다.
- . : 임의의 문자 한 개
- {m, n} : 최소 m번, 최대 n번 반복되는 문자열, ({n, } 최소 n 번 이상 반복되는 문자열)
- + : (= {1, }) 최소 한번 이상 반복되는 문자열
- ? : (= {0, 1}) 최대 한번(0번 포함) 이상 반복되는 문자열
- | : OR, 대괄호[ ] 내의 문자는 OR로 작동한다.
- [ ] : 범위 지정, (예시 A-Z, A-Za-z, 0-9)
- \d = [0-9], 숫자
- \D = [^0-9] = \d의 반대, 숫자가 아닌 문자
- \w = [A-Za-z0-9_], 알파벳 숫자 언더스코어
- not : [...] 내의 ^ (예로 [^0-9] = \D, 숫자를 제외한 문자)
- 시작 위치 : [...] 밖의 ^
- 마지막 위치 : $
자주 사용하는 정규표현식
이메일 주소
// 일반 이메일 주소 체크
const reg = /^([a-z0-9_.-]+)@([\da-z.-]+)\.([a-z.]{2,6})$/;
// 정밀한 이메일 주소 체크
const reg = /(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/
전화번호
// 3자리-3~4자리-4자리 유형 (문자 아무거나 가능)
const reg = /^\d[3]-\d[3,4]-\d[4]$/;
// 일반 유선 전화번호
const reg = /^(0[2-8][0-5]?)-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
// 휴대폰 번호
const reg = /^(01[01346-9])-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/
// 대표전화번호 (1588 등)
const reg = /^(1544|1566|1577|1588|1644|1688)-?([0-9]{4})$/;
비밀번호
// 최소 8자리 이상 영문 대소문자, 숫자, 특수문자가 각각 1개 이상
const reg = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,}$/;
// 최소 8자리이상 15자리이하 숫자, 특수문자가 1개 이상 포함
const reg = /^(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,15}$/;
신용카드
// 영문자(소문자), 숫자, "-", "_"로만 구성된 길이 2~10자리 사이의 문자열
const reg = /^[a-z0-9_-]{2,10}$/
// 19자리 숫자와 "-"로 구성 (신용카드 번호)
const reg = /^[0-9-]{19}$/;
// 숫자로 구성된 4자리-4자리-4자리-4자리 유형 체크 (신용카드 번호)
const reg = /^\d{4}[-\s.]?\d{4}[-\s.]?\d{4}[-\s.]?\d{4}$/;
주민등록번호
// 주민등록번호 체크
const reg = /^[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[@]{1}[-A-Za-z0-9_]+[-A-Za-z0-9_.]*[.]{1}[A-Za-z]{1,5}$/;
// 외국인 주민등록번호
const reg = /^(\d{6})-?(\d{5}[7-9]\d{1})$/;
시간
// 년월일 (yyyy-mm-dd) 체크
const reg = /^(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$/;
URL
// URL 체크 (프로토콜 포함, ex-http://naver.com)
const reg = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#()?&//=]*)/;
// URL 체크 (프로토콜 옵션, ex-http://naver.com, naver.com)
const reg = /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/;
사업자등록번호, 법인등록번호
//사업자 등록번호
const reg = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/;
//법인 등록번호
const reg = /^(\d{6})-(\d{7})$/;
문자
// 영문자 대소문자, 숫자로만 구성
const reg = /[a-zA-Z0-9]/;
// 공백없는 숫자와 대소문자
const reg = /^[a-zA-Z0-9]*$/
// 공백포함 숫자와 대소문자
const reg = /^[a-zA-Z0-9]*$/
// 한글포함 특수문자와 공백
const reg = /[^?a-zA-Z0-9/]/;
// 한글, 대문자, 특수문자, 공백 포함
const reg = /^(?=.*[ㄱ-ㅎㅏ-ㅣ가-힣A-Z!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?])/;
// 한글제외 특수문자와 공백
const reg = /[^-가-힣a-zA-Z0-9/ ]/;
// 특수문자
const reg = /[{}[\]/?.,;:|)*~`!^\-_+<>@#$%&\\=('")]/g;
// 특수문자와 공백
const reg = /[{}[\]/?.,;:|)*~`!^\-_+<>@#$%&\\=('"\s)]/g;
// 숫자인지 체크
const reg = /^(\(?\+?\d*\)?)?[\d_\- ()]*$/;
// 문자열에서 숫자를 찾는 정규식
const reg = /\d/g;
//소숫점 있는 금액 형식
const reg = /^[\d,.]+$/;
// 모든 공백 체크
const reg = /\s/g;
//첨부파일 지정된 확장자 확인
const reg = /([^\s]+(?=\.(jpg|gif|png))\.\w+)/;
'DEVELOPMENT > JavaScript' 카테고리의 다른 글
[JS] 동기와 비동기, 둘이 싸우면 누가 이길까? (3) | 2025.01.23 |
---|---|
[JS] 나를 위한 배열과 Date 메서드 컨닝페이퍼 (1) | 2025.01.22 |
[JS] let,const 와 var (2) | 2024.05.22 |
[JS] Todo-List (1) | 2024.05.13 |
[JS] 견종 정보 페이지 (3) | 2024.05.03 |