본문 바로가기

wif LiNoUz/Oracle,Sql

정규식






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