정규식 : 문자를 검토하는 식
● 사용법 : 슬래시 두 개 사이에 정규식 표현식을 입력한다.
/안/.test('안녕하세요')
=> '안' 이라는 글자가 '안녕하세요' 속에 있는지 검사하는 정규식. (하나만 찾는다)
/[a-zA-Z]/.test('abc')
=>소문자 a부터 z까지의 글자와 대문자 A-Z까지의 글자 중 단 한개라도 'abc' 속에 들어있는지 검사하는 정규식
/[ㄱ-ㅎ가-힣ㅏ-ㅣ]/.test('안녕하세요')
=>'안녕하세요' 속에 한글 문자가 1개 이상 존재하는지 검사하는 정규식
/[0-9]/.test('012')
=>'012' 속에 0부터 9까지의 숫자 중 1개 이상의 숫자가 포함되어 있는지 검사하는 정규식
/\S/.test('아무글자$')
=> \S 는 특수문자를 포함한 그 어떠한 글자가 '하나' 포함되어 있는지 검사하는 정규식
/\S+/.test('아무글자$')
=> + 는 왼쪽의 문자를 반복 검색해준다. \S를 반복 검사하므로, '어떠한 문자 하나라도'를 반복하여 개수 제한없는 문자의 개수를 검사하게 된다.
/^이/.test('이 로시작하나요?')
=> ^문자 는 특정 문자로 시작하는지 검사하는 정규식. 예제는 '이'라는 글자로 시작하는지 검사한다.
/다$/.test('다 라는 글자로 끝납니다')
=>문자$ 는 특정 문자로 끝나는지 검사하는 정규식. 예제는 '다'라는 글자로 끝나는지 검사한다.
/(이|거)/.test('이 또는 거 라는 글자가 들어있는지 검사합니다.')
=> | 기호는 or을 뜻한다. 값으로 주어진 글자가 하나라도 들어있으면 true를 반환한다.
정규식에 사용할 수 있는 기호 정리 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_Expressions
정규식
^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를 표현하며 알파벳 + 숫자 + _ 가 아닌 문자를 의미한다.
g : Global 의 표현하며 대상 문자열내에 모든 패턴들을 검색하는 것을 의미한다.
i : Ignore case 를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미한다.
m : Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미한다.
method
RegExp.exec : 대응되는 문자열을 찾는 method.
RegExp.match : 대응되는 문자열을 찾는 method.
String.search : 대응되는 문자열을 검사하는 string method. 대응되는 문자열의 index를 반환, 없다면 -1을 반환.
String.replace : 대응되는 문자열을 찾아 다른 문자열로 치환하는 String method
자주 쓰이는 정규식
1. 신용카드 번호
19자리 숫자와 "-": /^[0-9-]{19}$/
4-4-4-4 체크: /^[0-9]{4}[-\s\.]?[0-9]{4}[-\s\.]?[0-9]{4}[-\s\.]?[0-9]{4}$/
2. 전화번호
3자리-3~4자리-4자리(사이에 1자 아무거나 가능)): /^[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3,4}[-\s\.]?[0-9]{4}$/
3자리-3~4자리-4자리(사이에 "-" 고정): /^\d{3}-\d{3,4}-\d{4}$/
휴대폰&전화번호: /(^02.{0}|^01.{1}|[0-9]{3})([0-9]+)([0-9]{4})/
휴대폰번호: /^01(?:0|1|[6-9])[.-]?(\\d{3}|\\d{4})[.-]?(\\d{4})$/
3. UUID
/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/
4. 이메일주소
기본체크: /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
RFC5322: /\b[\w.!#$%&’*+\/=?^`{|}~-]+@[\w-]+(?:\.[\w-]+)*\b/
정밀체크: /(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/
5. 패스워드
최소 8자 이상으로 영문자 대문자, 영문자 소문자, 숫자, 특수문자가 각각 최소 1개 이상: /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,}$/
최소 8자 이상으로 숫자, 특수문자가 각각 최소 1개이상: /^(?=.*?[0-9])(?=.*?[#?!@$ %^&*-]).{8,}$/
6. URL
프로토콜 포함: /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#()?&//=]*)/
프로토콜 옵션: /(https?:\/\/)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/
7. 년도, 월, 일자
yyyy-mm-dd: /^(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$/
8. 주민등록번호
\d{2}([0]\d|[1][0-2])([0][1-9]|[1-2]\d|[3][0-1])[-]*[1-4]\d{6}
'JavaScript > JavaScript 기초' 카테고리의 다른 글
[Javascript ES8] 기초 문법 15. async, await (0) | 2022.12.21 |
---|---|
[Javascript ES6] 기초 문법 14. Promise (0) | 2022.12.21 |
[Javascript ES6] 기초 문법 13. synchronous, asynchronous (0) | 2022.12.21 |
[Javascript ES6] 기초 문법 13. Import, Export (0) | 2022.12.21 |
[Javascript ES6] 기초 문법 12. Destructuring (1) | 2022.12.20 |
댓글