Regular Expressions
정규식 테스트 사이트
//-----------------------
* 옵션( 플래그, flags)
- g : 전체 검색(global match)
- i : 대소문자 불문(ignore case)
- m : 다중행(multi line)
- u : 유니코드
//=============
* 문자셋(특수문자)
\d (= [0-9]) : 숫자
\D (= [^0-9]) : 숫자 아님
\w (=[a-zA-Z0-9_]) 문자( "_") ,
\W (=[^a-zA-Z0-9_]) 문자 아님
- 유니코드 옵션(u) 상태에서는 유니코드(한글)도 포함
- /\w/u
\s (= [ \t\v\n\r]) : 공간 문자 (하나의 공백 문자, 공간, 탭, 줄 바꾸기 )
\v : 세로탭
\S (= [^ \t\v\n\r]) :공간 문자가 아님
\r 줄바꿈, carriage return (ASCII 13)
\n 줄바꿈, line-feed (newline) (ASCII 10)
\t 탭
\f form-feed character (ASCII 12)
\v vertical whitespace
\b 단어 경계
\B 단어 경계가 아닌 부분
- 그룹[]안에서는 백스페이스, (그룹안에서 기능이 바뀌는 드문 경우)
- 예) \bCAT\b = CAT
\p{L} 유니코드 문자(숫자 제외) = /\w/u
\p{N} 유니코드 숫자
//------------------------
모든 기호 문자 [\W\s]
= [^\p{L}\p{N} ]+
= [-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]
모든글자 = \s\S
한글 = [ㄱ-ㅎㅏ-ㅣ가-힣]
//==========
* 문자 클래스
[ ] : 그룹, 단일문자
. : 한개 문자 (개행 문자를 제외)
- 그룹[]안 : . 문자
//================
* 앵커
^ : 문자열의 시작,
- 그룹[]안 : not
$ : 문자열의 끝
- 그룹[]안 : $ 문자
//================
* 반복(수량자)
- 이전요소가 몇개 일치할지 지정
* : 0개 이상
+ : 1개 이상
? : 0개 나 1개
{n} : n개
{n,} : n개 이상
{n,m} : n개 이상 m개 이하
//================
< 캡쳐 >
* (x) : 포획 괄호(캡쳐, capturing parentheses)
/(foo) (bar) \1 \2/ 안의 '(foo)' 와 '(bar)'는 문자열"foo bar foo bar"
- 패턴 부분 : \1, \2 ...
- 치환 부분 : $1 $2
'bar foo'.replace( /(...) (...)/, '$2 $1')
* (?:x) : 비포획 괄호(non-capturing parentheses)
/(?:abc){1,2}/ : {}가 단어 전체 abc 에 적용
/abc{1,2}/ : {}가 마지막 b 에 적용
/(abc){1,2}/ : ?
//=====================
* 룩어헤드 (lookahead)
x(?=y) : lookahead
x 뒤에 y 조건이 만족하는 경우, x 선택 (y는 선택 안됨)
x(?!y) : negated lookahead
x 뒤에 y 조건이 만족하지 않는 경우, x 선택
//
https://stackoverflow.com/questions/2973436/regex-lookahead-lookbehind-and-atomic-groups
string "foobarbarfoo":
bar(?=bar) finds the 1st bar ('bar'가 뒤에 있는 "bar")
bar(?!bar) finds the 2nd bar ('bar'가 뒤에 있지 않은 "bar")
(?<=foo)bar finds the 1st bar ('foo'가 앞에 있는 "bar")
(?<!foo)bar finds the 2nd bar ('foo'가 앞에 있지 않은 "bar")
(?<=foo)bar(?=bar) finds the 1st bar ("bar" with "foo" before it and "bar" after it)
- 검색에 활용
(?=.*[0-9]) 숫자가 최소한 하나
//================
* 소극적 일치, 적극적 일치
일반적으로 적극적 일치가 적용됨
소극적 일치란?
- 반복 ( * , + ) 뒤에 ? 를 붙여서 ( *? , +? )를 만들어 검색범위를 좁히는 것
//=====================================
< 유용한 활용 >
* 모든글자 = \s\S
* 옵션
? = 0 or 1
문자열 : https://qwe.com/ 과 qwe.com
정규식 : (https?:\/{2,2})?qwe.com\/?
* URL
https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&\/=]*)
* 패스워드 검사
function vaildPassword(p) {
var sp_allow = "\\]\[\~\!\@\#\$\%\^\&\*\(\)\-\+\_\{\}\:\<\>\,\.\?\/\|"; // ] 에 주의, \] 안됨 => \\]
var sp_prevent = "\=\`\'\"\;\@\\\\";// \에 주의, \\ 안됨 => \\\\
return /[a-z]/i.test(p) && //소문자가 최소한 하나
/[0-9]/.test(p) && //숫자가 최소한 하나
RegExp(`[${sp_allow}]`).test(p) && //특수문자가 최소한 하나
!RegExp(`[${sp_prevent}]`).test(p) && //금지문자 금지
!RegExp(`[^a-z0-9${sp_allow}]`,'gi').test(p); //범위 : 영문자와 숫자, 허용특수문자 만 허용
}
//
lookahead( (?=) ) 사용 검색
- lookahead는 소비를 하지 않아, 계속 전체 검색 가능
^ 시작
(?=.*[a-zA-Z]) 알파벳이 최소한 하나
(?=.*[0-9]) 숫자가 최소한 하나
(?=.*[!@#\$%\^&]) 특수문자가 최소한 하나
(?=.{8,}) 8 글자 이상
https://www.thepolyglotdeveloper.com/2015/05/use-regex-to-test-password-strength-in-javascript/
var mediumRegex = new RegExp("^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})");
//=============================
* 로그인
(?=^[0-9a-zA-Z]*$) - 영문숫자만 허용
(?=^[\\S]{3,7}$) - 글자수 3~7 로 제한
//=========================
*패스워드
(?=.*[a-zA-Z]) - 알파벳 최소 한개 포함
(?=.*[0-9]) - 숫자 최소 한개 포함
(?=.*[\~\!\@\#\$\%\&\*\(\)\_\+\-\=\{\}\\[\\]\:\;\<\>\?\,\.\/\^]) - 특수문자 한개 이상 포함
(?=^[^\`\|\'\"\\\\ ]*$) - 금지 문자 지정
(?=^[\x21-\x7E]*$) - 영문이외 문자 금지(한글 금지)
//=============
//참고
정규식 테스트 사이트
https://regex101.com/
https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/%EC%A0%95%EA%B7%9C%EC%8B%9D
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RegExp
https://docs.microsoft.com/ko-kr/dotnet/standard/base-types/regular-expression-language-quick-reference
https://www.w3schools.com/jsref/jsref_obj_regexp.asp
< 문자 클래스 >
\w*|\W* : 모든 글자(한글, 영어, 숫자 포함)
//참고
http://highcode.tistory.com/6
http://oog.co.kr/406
https://www.ibm.com/support/knowledgecenter/ko/SSBLQQ_8.7.1/com.ibm.rational.test.ft.doc/topics/RegExExamples.html
'Tips' 카테고리의 다른 글
어도비 프리미어 프로 사용법(사용팁 모음) (0) | 2017.10.15 |
---|---|
유튜브 feed rss 주소 알아내기 (0) | 2017.09.26 |
Windows Batch file 명령어 (0) | 2017.08.16 |
브라우저 배경색 글자색 바꾸기 (다크모드) (적용) (0) | 2017.08.02 |
현대차 경보음 해제 하는 방법 (0) | 2017.06.09 |