Regular expression, 정규표현식
■ RegEx 라이브러리
기본
정규표현식이란 문자열에서 특정한 캐릭터 조합(character combination)을 찾아내기 위한 패턴(pattern)으로 특정 문자나 문자열로 문자열을 다루는 것에 문자뿐 만이 아니고 특수 문자로 다룰 수 있고 이들을 조합하여 다룰 수 있는 조건식(pattern)을 제공하여 더 세밀한 방법으로 문자들을 검색할 수 있게 한다.
● object initializers를 사용한 방법
정규표현 =/패턴설정/[i|g|gi]
var r = /ab+c/i
/MSIE/.test(window.navigator.userAgent); // 브라우저가 IE인지 판단
● RegExp 객체의 생성자(constructor function)를 사용한 방법
new RegExp("패턴 설정"[, "i", | ,"g", | "gi"])
var re = new RegExp("ab+c", "i")
● 정규표현식 플래그 구성 요소
g : 완전일치(발생할 모든 pattern에 대한 전역 검색)
i : 대/소문자 무시
gi : 대/소문자 무시하고 완전 일치
※ 생략할 경우 기본값은 g
● 정규표현식과 함께 사용하는 함수
- String 객체의 search(regexp) : 정규식 패턴에 첫 번째로 일치하는 부분 문자열의 위치를 반환 하며 존재하지 않으면 -1을 리턴 한다.
- String 객체의 match(regexp) : 지정된 패턴과 동일한 패턴을 검색하여 배열 또는 null 문자를 리턴 한다.
- String 객체의 replace(regexp, replaceText) : 지정된 패턴과 검색하여 replaceText로 대체
- RegExp 객체의 exec(testString) : 지정된 패턴과 같은 패턴을 검색하여 배열 또는 null 문자를 리턴 한다.
- RegExp 객체의 test(testString) : 지정된 패턴과 같은 패턴을 검색하여 검색하면 true 를 리턴하며 그렇지 않으면 false 리턴 한다.
- RegExp 객체의 compile(pattern,[flags]) : compile 메서드는 script 수행 중 정규 식 개체를 컴파일 한다. compile 메서드는 단 한번 컴파일하기 위하여 기능함수 생성자로 생성된 RegExp 개체와 함께 사용된다. 그래서 정규식의 반복적인 컴파일을 방지할 수 있다.
● 정규 표현식에서 사용하는 특수문자
\ | 다음에 나오는 특수 문자를 문자열로 인식 '\\' 시퀀스는 "\"를 찾고 '\/'는 "/"를 찾는다 |
^ | 입력 문자열의 시작 위치를 검색. ^A 는 검색하고자 하는 문장의 시작문자가 A인지를 검사 |
$ | 입력 문자열의 끝 위치를 검색. A$ 는 검색하고자 하는 문장의 마지막문자가 A인지를 검사 |
* | 0개 이상의 문자를 검색(모든 것이라는 의미 → {0,} 같은 의미) "cg*"는 "c", "cginjs" 등.. |
+ | 1개 이상의 문자를 검색({1,} 같은 의미) "cg+"는 "cg", "cginjs" 등이지만 "c"는 아니다. |
? | 0 또는 1개의 문자 의미.({0,1} 같은 의미) " C?j" 라면 C라는 문자와 j라는 문자 사이에 문자가 0개 또는 1개 가 들어갈 수 있다는 의미 |
. | "\n"을 제외한 모든 단일 문자를 검색. "\n"을 포함한 모든 문자를 찾으려면 '[.\n]' 패턴을 사용 |
() | 한번 match를 수행해서 나온 결과를 기억함. /(cnj)/ 는 cnj라는 단어를 검색한 후, 그 단어를 배열등과 같은 저장장소에 남겨두어 나중에 다시 호출할 수 있도록 함 '(.)\1'은 연속적으로 나오는 동일한 문자 두 개를 찾는다. |
| | 부분합연산(OR) |
{n} | 정확히 n개의 문자(n은 음이 아닌 정수) |
{n,} | n개 이상의 문자 검색(n은 음이 아닌 정수) 예) "c{2,}"는 "cnj"의 "c"는 찾지 않지만 "bcccccccccf"의 모든 c는 검색 |
{n, m} | 최소 n개에서 최대 m개 검색 "b{1,4}"은 "bcccccccccf"의 처음 네 개의 c를 검색하며 쉼표와 숫자 사이에는 공백을 넣을 수 없다. |
[xyz] | 괄호 안의 문자 중 하나를 검색. 예를 들어 [a-z]라면 a부터 z까지의 모든 문자검색 "[abc]"는 "cnj"의 "c"를 검색 |
[^xyz] | 제외 문자 집합 "[^abc]"는 "acn"의 "n"를 검색 |
x|y | x 또는 y를 검색 "c|cginjs"는 "c" 또는 "cginjs"를 검색 |
[a-z] | 문자 범위. 지정한 범위 안의 문자 검색 "[a-z]"는 a부터 z사이의 모든 문자(여기선 소문자) 검색 |
[^a-z] | 제외문자 범위 검색 "[^a-z]"는 "a"부터 "z" 사이에 없는 모든 문자를 검색 |
[\b] | 백스페이스 검색 |
\b | 단어와 공백 사이의 위치를 검색 "er\b"는 "never"의 "er"는 찾지만 "verb"의 "er"는 찾지 않는다. |
\B | 단어와 비경계를 찾는다 "er\B"는 "verb"의 "er"는 찾지만 "never"의 "er"는 찾지 않는다. |
\cX | X 가 나타내는 제어 문자를 찾는다. \cM은 Control-M 즉, 캐리지 리턴 문자를 찾는다. |
\d | 0부터 9까지의 아라비아 숫자와 찾는다. [0-9]과 같은 의미 |
\D | 비 숫자 문자를 찾는다. [^0-9]와 같은 의미 |
\f | 폼피드 문자(form-feed)를 검색(\x0c와 \cL과 같은 의미) |
\n | linefeed(줄 바꿈 문자)를 검색(\x0a와 \cJ과 같은 의미) |
\r | 캐리지 리턴 문자를 검색(\x0d와 \cM과 같은 의미) |
\s | 공백, 탭, 폼피드 등의 공백을 감색([ \t\n\r\f\v]과 같은 의미) |
\S | \s가 아닌 문자(공백이 아닌 문자)를 검색.([^ \t\n\r\f\v]과 같은 의미) |
\t | 탭 문자를 검색(\x09와 \cI와 같은 의미) |
\v | 수직 탭 문자를 검색(x0b와 \cK와 같은 의미) |
\w | 밑줄을 포함한 모든 단어 문자를 검색("[A-Za-z0-9_]"와 같은 의미) |
\W | 문자가 아닌 요소, 즉 % 등과 같은 특수 문자를 의미함("[^A-Za-z0-9_]"와 같은 의미) |
\n | n은 마지막 일치하는 문장 |
\xn | n을 검색 여기서 n은 16진수 이스케이프 값으로 16진수 이스케이프 값은 정확히 두 자리여야 한다. '\x41'은 "A"를 찾고 '\x041'은 '\x04'와 "1"과 같다. |
\num | num을 찾는다.(num은 양의 정수) |
\nm | 8진수 이스케이프 값이나 역 참조를 나타낸다. \nm 앞에 최소한 nm개의 캡처된 부분식이 나왔다면 nm은 역참조이며 \nm 앞에 최소한 n개의 캡처가 나왔다면 n은 역참조이고 뒤에는 리터럴 m이 온다. 이 두 경우가 아닐 때 n과 m이 0에서 7 사이의 8진수이면 \nm은 8진수 이스케이프 값 nm을 찾는다. |
\nml | n이 0에서 3 사이의 8진수이고 m과 l이 0에서 7 사이의 8진수면 8진수 이스케이프 값 nml을 찾는다. |
\un | n은 4 자리의 16진수로 표현된 유니코드 문자 \u00A9는 저작권 기호(ⓒ)를 찾는다. |
예제
● 내용의 값의 빈공백을 trim(앞/뒤)
1 2 3 4 | String.prototype.trim = function (){ var TRIM_PATTERN = /(^\s*)|(\s*$)/g; return this .replace(TRIM_PATTERN, "" ); }; |
● 이메일 형식 검사
1 2 3 4 5 6 | function isValidEmail(data){ var format = /^((\w|[\-\.])+)@((\w|[\-\.])+)\.([A-Za-z]+)$/; if (data.search(format) != -1) return true ; //올바른 포맷 형식 return false ; } |
● 한글 필터링
1 2 3 4 5 6 7 | function isValidKorean(data){ // UTF-8 코드 중 AC00부터 D7A3 값이지 검사 var format = /^[\uac00-\ud7a3]*$/g; if (data.search(format) == -1) return false ; return true ; //올바른 포맷 형식 } |
● 이미지 파일인지 검사
1 2 3 4 5 6 | function isImageFile(fileName){ if (!/(\.gif|\.jpg|\.jpeg|\.png)$/i.test(fileName)) { return false ; } return true ; } |
● 숫자인지 검사
1 2 3 4 5 6 | function isValidNumber(data){ var format=/^[0-9]*$/g; if (data.search(format) == -1) return false ; return true ; } |
● 생년월일
1 2 3 4 5 6 7 8 | format = /[12][0-9]{3}-[01][0-9]-[0-3][0-9]/; //YYYY-MM-DD 검사표현식 //if(f.birth.value.search(format)==-1) if (! format.test(f.birth.value)) { alert( "생년월일을 정확하게 입력하세요" ); f.birth.focus(); return ; } |
● 숫자만 입력하게 함
1 2 3 4 5 6 | if (! /^(\d+)$/.test(f.age.value)) { alert( "숫자만 입력하세요." ); f.age.focus(); return ; } |
● 날짜 형식 검사 정규표현식 : 2011-03-01
1 2 3 4 5 6 7 8 9 10 11 | function isValidDateFormat(data){ var format = /[12][0-9]{3}-[0-9]{2}-[0-9]{2}/; if (data.search(format) == -1) return false ; var _year = data.substr(0,4); var _month= data.substr(5,2); var _day = data.substr(8,2); return isValidDate(_year, _month, _day); } |
'wif LiNoUz > Oracle,Sql' 카테고리의 다른 글
I. 오라클 파티션 정의 (0) | 2014.06.14 |
---|---|
파티션 테이블 TRUNCATE 작업 스크립트 (0) | 2014.06.14 |
wait event 관련 (0) | 2014.06.12 |
Code Colorful (0) | 2014.06.12 |
롤백세그먼트 관련 및 크기증가 (0) | 2014.06.11 |