입력 유효성 검사 및 파일 구문 분석과 관련하여 정규식을 사용하여 수행할 수 있는 작업은 다양합니다. 가장 일반적인 식 중 일부는 사용할 수 있는 기능 및 옵션으로 인해 기억하기 어려운 경우가 많습니다. 다음은 일반적으로 사용되는 정규식 목록입니다.
사회 보장 번호 | \d{3}-\d{2}-\d{4} |
미국 전화 번호 | ((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4} |
미국 우편 번호 | \d{5}(-\d{4})? |
인터넷 전자 메일 주소 | [\w-]+@([\w-]+\.)+[\w-]+ |
인터넷 URL | http://([\w-]\.)+[\w-](/[\w- ./?%=]*)? |
단순 암호(숫자) | ^(?=.*\d).{4,8}$ |
고급 암호(대문자, 소문자, 숫자) | ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{4,8}$ |
공용 파일 마스크 | ^(.+)\\(.+)\.(.+) |
주요 신용 카드 | \d{4}-?\d{4}-?\d{4}-?\d{4} |
정규식의 개념
정규식을 정확히 정의하려면, automata, regular language, finite state machine 등을 설명해야 합니다. 그냥 일반적으로는 패턴매칭을 위한 언어라고 넘어갈 수 있지만, 정규식으로 matching할 수 없는 패턴도 많고, 왜 정규식에 이런 연산자가 없을까 고민하기 시작하면, 모든 것이 모호해져버립니다.
^ (caret) | 라인의 처음이나 문자열의 처음을 표시 | ^aaa (문자열의 처음에 aaa를 포함하면 참, 그렇지 않으면 거짓) |
$ (dollar) | 라인의 끝이나 문자열의 끝을 표시 | aaa$ (문자열의 끝에 aaa를 포함하면 참, 그렇지 않으면 거짓) |
. (period) | 임의의 한 문자를 표시 | ^a.c (문자열의 처음에 abc, adc, aZc 등은 참, aa 는 거짓) |
a..b$ (문자열의 끝에 aaab, abbb, azzb 등을 포함하면 참) | ||
[] (bracket) | 문자의 집합이나 범위를 나타냄, 두 문자 사이의 "-"는 범위를 나타냄 | [] 내에서 "^"이 선행되면 not을 나타냄 |
{} (brace) | {} 내의 숫자는 직전의 선행문자가 나타나는 횟수 또는 범위를 나타냄 | a{3} ('a'의 3번 반복인 aaa만 해당됨) |
* (asterisk) | "*" 직전의 선행문자가 0번 또는 여러번 나타나는 문자열 | ab*c ('b'를 0번 또는 여러번 포함하므로 ac, ackdddd, abc, abbc, abbbbbbbc 등) |
+ | "+" 직전의 선행문자가 1번 이상 나타나는 문자열 | ab+c ('b'를 1번 또는 여러번 포함하므로 abc, abckdddd, abbc, abbbbbbbc 등, ac는 안됨) |
? | "?" 직전의 선행문자가 0번 또는 1번 나타나는 문자열 | ab?c ('b'를 0번 또는 1번 포함하므로 abc, abcd 만 해당됨) |
() (parenthesis) | ()는 정규식내에서 패턴을 그룹화 할 때 사용 | |
| (bar) | or를 나타냄 | a|b|c (a, b, c 중 하나, 즉 [a-c] 와 동일함) |
\ (backslash) | 위에서 사용된 특수 문자들을 정규식내에서 문자로 취급하고 싶을 때 '\'를 선행시켜서 사용하면됨 | filename\.ext ("filename.ext"를 나타냄) |
정규식에서는 위에서 언급한 특수 문자를 제외한 나머지 문자들은 일반 문자로 취급함
위의 정규식 연산자 가운데 vi에서는 지원하지 않는 연산자가 있습니다. vi의 경우 +연산자도 없습니다. regular expression library에 따라 지원하는 연산자의 종류가 상당히 다릅니다. 요즘은 perl-style regular expression이 표준으로 자리잡아가는 것이 대체적인 추세이고, perl의 regular expression은 가장 복합하고 기능이 많은 편입니다.
[abc] | (a, b, c 중 어떤 문자, "[a-c]."과 동일) |
[Yy] | (Y 또는 y) |
[A-Za-z0-9] | (모든 알파벳과 숫자) |
[-A-Z]. | ("-"(hyphen)과 모든 대문자) |
[^a-z] | (소문자 이외의 문자) |
[^0-9] | (숫자 이외의 문자) |
[[:digit:]] | ([0-9]와 동일) |
a{3,} | ('a'가 3번 이상 반복인 aaa, aaaa, aaaa, ... 등을 나타냄) |
a{3,5} | (aaa, aaaa, aaaaa 만 해당됨) |
ab{2,3} | (abb와 abbb 만 해당됨) |
[0-9]{2} | (두 자리 숫자) |
doc[7-9]{2} | (doc77, doc87, doc97 등이 해당) |
[^Zz]{5} | (Z와 z를 포함하지 않는 5개의 문자열, abcde, ttttt 등이 해당) |
.{3,4}er | ('er'앞에 세 개 또는 네 개의 문자를 포함하는 문자열이므로 Peter, mother 등이 해당) |
* | (선행문자가 없는 경우이므로 임의의 문자열 및 공백 문자열도 해당됨) |
.* | (선행문자가 "."이므로 하나 이상의 문자를 포함하는 문자열, 공백 문자열은 안됨) |
ab* | ('b'를 0번 또는 여러번 포함하므로 a, accc, abb, abbbbbbb 등) |
a* | ('a'를 0번 또는 여러번 포함하므로 k, kdd, sdfrrt, a, aaaa, abb, 공백문자열 등) |
doc[7-9]* | (doc7, doc777, doc778989, doc 등이 해당) |
[A-Z].* | (대문자로만 이루어진 문자열) |
like.* | (직전의 선행문자가 '.'이므로 like에 0 또는 하나 이상의 문자가 추가된 문자열이 됨, like, likely, liker, likelihood 등) |
ab+ | ('b'를 1번 또는 여러번 포함하므로 ab, abccc, abb, abbbbbbb 등) |
like.+ | (직전의 선행문자가 '.'이므로 like에 하나 이상의 문자가 추가된 문자열이 됨, likely, liker, likelihood 등, 그러나 like는 해당안됨) |
[A-Z]+ | (대문자로만 이루어진 문자열) |
yes|Yes | (yes나 Yes 중 하나, [yY]es와 동일함) |
korea|japan|chinese | (korea, japan, chinese 중 하나) |
[\?\[\\\]] | ('?', '[', '\', ']' 중 하나) |
한글이름 정규식 : [\uac00-\ud7a3]{2,4}
''.' Programs > JavaScript' 카테고리의 다른 글
[Javascript] setCookie (0) | 2012.03.16 |
---|---|
[Javascript] select()와 clear() ( 파일 확장자 체크 ) (0) | 2012.03.16 |
[Javascript] clearTimeout settimeout 사용법 차이점 (0) | 2012.03.16 |
[Javascript] PHP 배열 자바스크립트에서 배열로 받기. (0) | 2012.03.12 |
[Javascript] IE8 이하에서 substr 함수 사용 시 이미지 안나올경우.. (0) | 2012.03.12 |