PHP 예제를 통한 정규표현식 사용법 배우기
* 참고사이트 :
http://www.phpbuilder.com/columns/dario19990616.php3
제일 먼저 '^'와 '$'의 두 가지 기호에 대해 알아보겠습니다. '^'와 '$'은 시작과 끝을 나타내는 문자입니다. 아래 예제를 보세요.
"^The" : "The"로 시작하는 문자열을 체크합니다. |
하나의 문자나 여러개의 문자열의 수를 나타내는 '*', '+', '?'기호도 있습니다. 이 기호들의 의미는 "없거나 여러개", "하나 또는 여러개", "없거나 하나"입니다. 아래에 예제를 보세요.
"ab*": "a"뒤에 "b"가 없거나 여러개 이어서 오는 문자열을 가르킵니다. |
"{ }"와 범위를 정해서 경계(bound)를 사용할 수 도 있습니다. 다음 예제를 보세요.
"ab{2}": "a"뒤에 "b"가 2번따라 오는 문자열을 가르킵니다. ("abb") |
주의 할 것은 {0,2}와 같이 범위가 시작되는 부분을 명시해야 합니다. { ,2}와 같이 사용해서는 안됩니다. "*"은 "{0,}", "+"는 "{1,}", "?"는 "{0,1}"과 같은 효과를 가집니다.
문자열에 "()"를 사용해서 다음과 같이 사용할 수 도 있습니다.
"a(bc)*": "a"뒤에 "bc"가 없거나 한번이상 오는 문자열을 체크합니다. |
"|"기호는 OR연사자와 같은 역할을 합니다. 아래 예제를 보세요.
"hi|hello": "hi" 또는 "hello" 문자열을 체크합니다. |
"."는 임의의 한 문자를 나타냅니다. 아래 예제를 보세요.
"a.[0-9]": "a"뒤에 임의의 한 문자가 오고 그 뒤에 0~9중에서 하나의 수가 오는 |
"[]"는 "[]"안에 포함된 하나의 문자를 체크합니다.
"[ab]": "a|b"와 같은 효과를 내는 표현으로 "a" 또는 "b" 문자중 하나를 |
사용하기 원하지 않는 문자열을 제외시키려면 "[]"안에서 "^"를 사용하면 됩니다.
"%[^a-zA-Z]%" : "%"사이에 영문 소문자와 대문자를 제외한 임의의 문자가 |
특별한 의미를 가지고 있는 "^.[$()|*+?{\"와 같은 탈출문자들을 있는 그대로 표현하려면 탈출시키는 기능을 하는 "\"를 앞에 사용해야 합니다.
그렇지만, "[]"안에서는 이 표현 규칙이 적용되지 않습니다. "[*\+?{}.]"는 "*\+?{}."문자 앞에 "\"를 사용하지 않아도 특별한 의미를 상실해서 있는 문자가 있는 그대로 사용됩니다.
금액을 표현하는 유형 체크하기
금액을 표현할 수 있는 4가지 방법("10000.00", "10,000.00", "10000", "10,000")이 있는데 어떤 유형으로 금액을 표현했는지를 검사하는 정규표현식을 알아보겠습니다.
^[1-9][0-9]*$ |
위 표현식은 1~9중 하나의 숫자로 시작하고 0~9중 하나의 숫자를 한 번이상 사용해서 끝난 문자열을 체크합니다.
그렇지만, 0을 제외하고 시작하기 때문에 "0"을 가리킬 수는 없습니다. 다음과 같이 하면 이 문제를 해결할 수 있습니다.
^(0|[1-9][0-9]*)$ |
이렇게 하면 "0"도 가리킬 수 있습니다. 여기서 금액을 마이너스로 표현하였는지 검사하고 싶다면 다음과 같이 하면 됩니다.
^(0|-?[1-9][0-9]*)$ |
다음과 같이하면 소수점을 포함한 유형을 가리킬 수 있습니다.
^[0-9]+(\.[0-9]+)?$ : "10", "10.1"과 같은 유형을 체크합니다. |
소수점 이하의 자리수를 유동적으로 표현하고자 한다면 다음과 같이 하면됩니다.
^[0-9]+(\.[0-9]{1,2})?$ : "10", "10.1", "10.11"과 같은 유형을 체크합니다. |
이제 천단위씩 ","로 끊어서 나타내는 유형을 검사하는 표현을 알아보겠습니다.
^[0-9]{1,3}(,[0-9]{3})*(\.[0-9]{1,2})?$ |
위 표현으로는 "10000"와 같은 유형을 가리킬 수 없습니다. 금액을 표시할 수 있는 4가지 유형을 모두 가리키도록 하려면 아래와 같이 표현하면 됩니다.
^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(\.[0-9]{1,2})?$ |
여러분은 e-mail을 가지고 있을 것입니다. 이것은 POP3에 접속하는 사용자 계정(@의 왼쪽 부분전체), @, 서버명 세부분으로 나눌 수 있습니다. 아마, 사용자 계정은 대·소문자, 숫자, ".", "-", "_"로 구성되어 있을 것입니다. 서버명의 경우에는 "_"가 제외됩니다.
사용자 계정을 "."으로 시작하거나 끝내는 것은 올바르지 않습니다. 도메인명 역시 마찬가지입니다. 두 개의 연속적인 "."역시 사용할 ?없고 문자들 사이에 위치해야 합니다. 사용자 계정부분은 다음과 같은 표현으로 체크할 수 있습니다.
^[_a-zA-Z0-9-]+$ |
이것은 "."을 체크하지 않기 때문에 다음과 같이 바꾸어 줍니다.
^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*$ |
위 표현을 보면 대문자와 소문자를 따로 구분해 놓았는데 나중에 프로그램을 작성할 때 eregi()라는 함수를 사용한다면 다음과 같은 표현으로 바꿀 수 있습니다.
* 참고 : ereg()함수는 대문자와 소문자를 따로 구분해서 체크하지만 eregi()함수는
대,소문자를 구분하지 않고 체크합니다.
^[_a-z0-9-]+(\.[_a-z0-9-]+)*$ |
서버명은 사용자 계정과 동일한 규칙을 가지지만 "_"는 사용될 수 없습니다. 따라서 다음과 같이 표현됩니다.
^[a-z0-9-]+(\.[a-z0-9-]+)*$ |
위의 모든 표현들을 합쳐서 아래와 같이 나타내서 전자우편의 타당성을 검사 할 수 있습니다.
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$ |
아래에 위의 표현식을 이용해서 간단한 전자우편 체크페이지를 만들어 보겠습니다.
다음에 e-mail.html이라고 불리는 전자우편 주소를 입력받을 폼을 만듭니다.
<HTML> |
다음에 email_check.php라고 불리는 전자우편 주소의 타당성을 검사할 페이지를 만듭니다.
<? |
<그림1-1 e-mail체크 From>
<그림1-2 e-mail체크 결과>
이번 강좌에서는 정규표현식에 대해 알아보았는데 이러한 정규표현식을 잘 사용한다면 사용자의 잘못된 입력에 의한 오류와 같은 것들을 미리 예방할 수 있을것입니다.
다음 강좌에서는 MIME에 대해 알아보고 메일을 보낼 수 있는 방법에 대해서 알아 보도록 하겠습니다.
=======================================================================================