[PHP] 정규표현식 preg_match()

2022. 9. 19. 01:05Program/PHP

071_PHP 정규표현식 preg_match()

[요약]

  • 변수의 값이 숫자인지, 영문인지, 한글인지를 검사하는 정규표현식 preg_match()에 대해 알아보자.

값이 한글로만 구성되어 있는지 영어로만 구성되어 있는지 또는 어떤 특별한 패턴을 지키고 있는지에 대해 체크하려면 정규표현식을 사용한다. 정규표현식을 사용하면 이메일 주소가 옳은 주소형식을 갖췄는지, 이름이 한글로만 이루어졌는지, 전화번호가 올바르게 입력되었는지 등을 검사할 수 있다.

정규표현식의 패턴을 사용하려면 preg_match() 함수를 사용한다.


[preg_match() 함수 사용 방법]

preg_matchk(패턴, 검사할 텍스트, 반환할 패턴 일치 결과를 받을 변수)

첫 번째 아규먼트인 패턴은 정규실을 이용해 만든 패턴이다.

두 번째 아규먼트에는 정규실을 이용해 걸사할 텍스트이다.

세 번쨰 아규먼트에는 패턴에 어떠한 겨로가가 일치했는지 preg_match() 함수가 반환하는데, 그 반환한 값을 대입할 변수를 입력한다.

 

패턴은 다음과 같이 작은 따옴표와 슬래시 사이에 입력한다.

$pattern = '/패턴 입력할 곳/';

 

패턴을 작성하는 방법에 대해 알아보자.

어떠한 변수의 값이 한글로만 구성되어 있는지에 대해 확인하는 패턴을 만들어보자.

 

한글로만 구성됨을 확인하려면 첫 번째 글자가 한글이어야 하고 끝나는 글자도 한글이어야 하고 또 시작하는 글자와 끝나는 글자 사이에도 한글로 구성되어야 한다.

첫 번째 글자를 적용하는 기호는 '^'이다.

끝나는 글자를 적용하는 기호는 '$'이다.

문자열의 값이 i인지 확인하는 패턴은 다음과 같다.

$pattern = '/^!$/';

특정한 문자열이 i로 시작하고 i로 끝나는지 확인하는 패턴이다.

 

다음은 앞의 패턴식을 적용한 예제이다.

[예제: 73-1_regExp.php ]

<?php
    // 패턴 대입
    $pattern = "/^i$/";

    $str = "i";

    if (preg_match($pattern, $str, $matches)) {
      echo "값 {$str}은(는) 정규식 표현에 적합한 값입니다.";
      echo "<pre>";
      var_dump($matches);
      echo "</pre>";
    } else {
      echo "이름에 특수문자, 한글 또는 숫자가 있는지 확인 요망.";
    }
<?

실행결과

위의 코드에서 변수 strdp rkqt 'ii'를 대입하면 패턴식에 맞지 않게 된다.

패턴식은 검사할 바이트 수나 횟수를 지정하지 않으면 기본적으로 1byte를 검사하기 때문이다.

여기서 1byte라는 것은 컴퓨터 용량의 단위이며 영문과 특수문자는 1글자당 1byte의 용량을 사용한다.

변수 str의 값은 "i" 한글자로 1byte를 검사하므로 패턴식에 맞지만, str의 값으로 ii를 영문 2글자가 사용되어 패턴식의 규칙에 어긋나게 된다. 그러므로 1byte 이상의 값을 검사하려면 패턴식을 검사하는 값 뒤에 몇 byte를 검사하는지 지정해야 한다.

 

1byte 이상을 검사하는 기호로 '+'를 사용하며 패턴식으로 나타내면 다음과 같다.

$pattern = '/^i+$/';

 검사하려는 문자 뒤에 기호'+'를 사용해 1byte이상 체크함을 의미한다.

 

다음은 앞의 패턴식을 사용한 예제이다.

[예제: 73-2_regExp.php ]

<?php
    // 패턴 대입
    $pattern = "/^i+$/";

    $str = "ii";

    if (preg_match($pattern, $str, $matches)) {
      echo "값 {$str}은(는) 정규식 표현에 적합한 값입니다.";
      echo "<pre>";
      var_dump($matches);
      echo "</pre>";
    } else {
      echo "이름에 특수문자, 한글 또는 숫자가 있는지 확인 요망.";
    }
?>

실행결과

3라인의 패턴식은 1byte 이상을 검사하므로 값으로 'iii'를 대입해도, 'iiiii'를 대입해도 패턴식 검사에 이상이 없다.

 

 


 

 

 

초보자를 위한 PHP 200제
김태영 지음 | 정보문화사