블로그 이미지
Sunny's

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2010. 10. 22. 19:38 .NET Framework

static void Main(string[] args)
{
        string str = "abcwDW2";

        // 날짜 형식 "yyyy-MM-dd"
        string sParttern = @"^(19[0-9]{2}|2[0-9]{3})-(0[1-9]|1[012])-([123]0|[012][1-9]|31)$";  

        // 숫자와 영문 소문자,대문자만 입력가능합니다.(글자제한100)");
        //string sParttern = @"^[0-9a-zA-Z]{1,100}$";

        Regex regex = new System.Text.RegularExpressions.Regex(sParttern );

        Boolean ismatch = regex.IsMatch(str);
        if (!ismatch)
        {
            Console.WriteLine("날짜 형식이 아닙니다.");
        }
}




영문 소문자, 대문자와 숫자만 가능하도록 하는 유효성 체크에 사용될 만한 예제입니다.

posted by Sunny's
2010. 4. 20. 15:38 ASP.NET
정규식
 숫자에 콤마 찍기 {0:#,##0}

예제)
String.Format("{0:#,##0}","1230");


posted by Sunny's
2009. 11. 3. 16:37 ETC

var str = "http://yahoo.co.kr";

document.write(str.match(/http/));
document.write(str.replace(/http/,"timo")); 

document.write(str.match(/^t/));
 // ^ : t로 시작하는 문자열, str은 h 로 시작하므로 null 반환
document.write(str.replace(/^h/,"hahaha"));
// hahahattp://yahoo.co.kr 

document.write(str.match(/t$/));
// $ : t로 끝나는 문자열, str은 r 로 끝나므로 null 반환

document.write(str.replace(/r$/,"kakaka"));

// http://yahoo.co.kkakaka 
// . \n 을 제외한 한 문자
document.write(str.match(/.r/));
// . : 문자 + r 조합으로 이루어진 문자열 kr 반환
document.write(str.match(/h./));
// h + 문자 조합으로 이루어진 문자열 ht 반환
document.write(str.match(/h.t/)); 
// h + 문자 + t 조합으로 이루어진 문자열 htt 반환
str = "ooaaadddccadooaddd"
document.write(str.match(/d*d/g));
// * : d 앞에 d 가 0번 이상 나오는 문자열. ddd,d,ddd 반환
document.write(str.replace(/d*d/g,"__"));
//  ooaaa__cc__oo__ 
str = "xxxyyyxyz";
document.write(str.match(/xy?z/g));
// ? : z 앞의 문자 y 가 없거나 딱한번 있는 문자열 xyz 반환
document.write(str.replace(/xy?z/g,"_"));
// xxxyyy_  
str = "xxxyyyxyyyyyz";
document.write(str.match(/xy+z/g));
// + : z 앞의 문자 y 가 한번 이상 있는 문자열 xyyyyyz  반환
document.write(str.replace(/xy+z/g,"_"));
// xxxyyy_ 

[] : 괄호안의 !!문자!!나 !!숫자!!중 !!하나에!! 해당되면 참

document.write(str.match(/[xyz]/g));

// x,x,x,y,y,y,x,y,y,y,y,y,z


document.write(str.replace(/[xyz]/g,"_"));

// _____________

 

str = "ab12cd";

document.write(str.match(/ab[12]cd/g));

// [] 기호는 한개의 문자에 매치되므로 결과는 null

// ab1cd 이거나 ab2cd 인 문자열에 매치된다. 

str = "ab1cd";

document.write(str.match(/ab[12]cd/g));

// [] 기호는 한개의 문자에 매치되므로 결과는 ab1cd  

document.write(str.match(/ab[^12]cd/g));

// ab1cd 가 아니거나 ab2cd 가 아닌 문자열을 찾는다. 결과는 null 

document.write(str.match(/ab[^34]cd/g));

// ab3cd 가 아니거나 ab4cd 가 아닌 문자열을 찾는다. 결과는 ab1cd


{} 괄호앞의 !!문자!! 가 반복된 횟수를 의미 , 숫자만 들어갈 수 있다.


str = "xxxyyyz";

document.write(str.match(/x{3}y/g));

// x가 3번 반복된 문자열을 찾는다. 결과는 xxxy


document.write(str.match(/x{1,}y/g));

// x가 1번 이상 반복된 문자열을 찾는다. 결과는 xxxy


document.write(str.match(/x{0,3}y/g));

// x가 0번 이상 3번 이하 반복된 문자열을 찾는다. 결과는 xxxy,y,y


() 괄호안의 문자열을 참조 단독으로 쓰지 않고 *,+,? 등과 조합해서 사용된다.
str = "xyayayaz";

document.write(str.match(/x(ya)*z/g)); //==> xyayayaz  

str = "xxxxxabcabczzzzz";
document.write(str.match(/x(abc)*z/g));

// *는 z앞의 문자가 없거나 한번 이상 있는 경우를 나타내므로 결과는  xabcabcz


document.write(str.match(/x(abc)?z/g));

// ?는 z앞의 문자가 없거나 딱 한번 있는 경우를 나타내므로 결과는 null


document.write(str.match(/x(abc)+z/g));

// +는 z앞의 문자가 한번 이상 있는 경우를 나타내므로 결과는 xabcabcz
document.write(str.match(/x(abc){0,2}z/g));

// xabcabcz
document.write(str.match(/x(ab|cd){0,2}z/g));

// xabcabcz  

str = "http://naver.com http://na http://nav";
document.write(str.match(/(http:\/\/[a-zA-Z0-9\.]{1,})/g));

// http://naver.com,http://na,http://nav  

document.write(str.replace(/(http:\/\/[a-zA-Z0-9\.]{1,})/g,"*"));

// * * *
document.write(str.match(/(http:\/\/[a-zA-Z0-9\.]{10,})/g));

// null
[이메일]
-이메일 형식을 검색
/\w+@\w+\.\w+/g 

[숫자]
-숫자가 아닌 문자를 검색
/\D+/g 

[이름]
-이름에 숫자나 특수문자가 들어갔는지 검증
/[^a-zA-Z]+/g

/[^a-zA-Z가-하]+/g

정규식을 바로 테스트 해 볼수 있는 사이트

http://www.roblocher.com/technotes/regexp.aspx

http://blog.naver.com/liba2000?Redirect=Log&logNo=140052579331

posted by Sunny's
2009. 11. 3. 14:00 ETC

문서편집이나 프로그래밍, 코딩 작업을 할때 단순 반복 작업을 할 경우들이 있다.
편집할 내용이 얼마 안된다면 빠른 손동작으로 수정을 하면 되겠지만 편집할 분량이 많은 때 손동작 만으로 편집을 하게 될 경우 몇날 몇일을 수정하고 확인해야 하는 지루한 작업이 될 수 있다. 어찌 보면 단순 반복작업인데 바꿔야할 내용도 편집할 분량도 많다면 컴퓨터 초보자에게는 난감한 일이 아닐 수 없다.

이럴 경우에 정규식 치환을 이용하는 것이 좋다. 아래 동영상은 에디트플러스(editplus)라는 편집기로 바꾸기를 할때 정규식 체크를 해서 대량의 데이타를 구미에 맞게 변환하는 모습을 보여준다. 몇자 안되는 변환식으로 몇날 몇일 했던 반복 작업을 순식간에 처리할 수 있다. 단, 편집할 내용에 적당한 규칙이 있어야 한다.

그러나 대부분의 반복작업의 경우 규칙이 있게 마련이다. 자유롭게 데이타를 바꾸는 것은 학습이 어느 정도 필요하므로 필요에 따라 정규식을 알고 있는 전문가나 개발자에게 도움을 구하는 것도 현명한 방법일 수 있다.



* 첫번째 바꾸기 변환식) ([a-z]+)\n ===> \1','
  - 배열문에 데이타를 일괄 적용할 때 응용할 수 있다.
* 두번째 바꾸기 변환식) ([a-z]+)\n ===> color_array[]='\1';\n
  - 자바스크립트나 액션스크립트에서 배열문을 만들때 응용할 수 있다.
* 세번째 바꾸기 변환식) ([a-z]+)\n ===> \1='$x_\1',\n
  - PHP에서 SQL 문을 만들때 응용할 수 있다.

처음 정규식을 접하는 분들은 어려워서 배우는 것을 쉽게 포기할 수 있다. 사람은 누구나 필요하면 하게 되 있다. 필요한 것부터 하나 하나 만들거나 배껴 쓰다 보면 어느 순간 전문 편집가가 되어 있을 것이다.
당신이 프로그래머라면 정규식, 스크립트 언어, 데이타베이스, 매크로들을 잘 조합하면 번역기 같은 고난이도 변환 프로그램도 만들수 있을 것이다.

다음 시간에는 실생활에 응용할 수 있는 다양한 정규식에 대해 다뤄보기로 하자!
posted by Sunny's
2009. 9. 7. 17:17 .NET Framework
// This code example demonstrates the String.Format() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
// Store the output of the String.Format method in a string.
    string s = "";

    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    s = String.Format(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);
    Console.WriteLine(s);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    s = String.Format(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal sortable: . . . {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);
    Console.WriteLine(s);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    s = String.Format(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);      
    Console.WriteLine(s);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal sortable: . . . Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003*/


posted by Sunny's
prev 1 next