본문 바로가기
배우고 있습니다/PHP

[PHP] 개발 기초 함수 정리 ( var_dump / preg_match )

by 유헤 2019. 11. 10.

● 디버깅 테스트에 필요한 함수

var_export : 결과 값은 PHP에 맞는 유효한 타입으로 변환되어 출력, 타 스크립트 연계 시 사용

var_dump : 각 데이터에 대한 상세한 정보(타입, 길이) 출력

 

print_r : 타입을 제외한 데이터 값만 간단하게 출력

 

https://niceman.tistory.com/34

 

● 정규식 표현 함수 / 문자 필터링 함수 (preg_match)

ereg, eregi와 같은 함수는 취약점 발견이 있어, PHP 5.3버전 이상부터는 preg_match를 사용한다고 합니다.

관련되어 자세한 포스팅은 

https://hackability.kr/entry/PHP-%EB%AC%B8%EC%9E%90%EC%97%B4-%ED%95%84%ED%84%B0%EB%A7%81-%ED%95%A8%EC%88%98ereg-eregi-%EC%B7%A8%EC%95%BD%EC%A0%90%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9A%B0%ED%9A%8C

에 취약점에 대해 소개 되고 있습니다.

 

preg_match ( 정규식 표현 , 검색 대상 문자열 , 매칭 된 값들을 배열로 저장 )

return 값은 매칭 성공 시 1, 실패 시 0을 가져옵니다.

https://ponyozzang.tistory.com/176

 

preg_replace 특정 패턴을 찾아 다른 패턴으로 바꿔주는 함수

preg_replace("[패턴]" , "[바꿀 패턴]" , "[바꿀 문장]"); 

....

    if(preg_match("/^[0-9]/", $clue, $match )){

        $dnoun_tmp = $clue;

        # . / , 등의 패턴을 제거

        $dnoun_tmp = preg_replace('/\.|,|^\/$/', "", $dnoun_tmp);

        # 숫자 제거

        $dnoun_tmp = preg_replace('/[0-9]/' , "" , $dnoun_tmp);

        $dnoun_tmp = preg_replace('/이상$|미만$/' , "" , $dnoun_tmp);

        echo $clue . "\t" ."   =>    \t". $dnoun_tmp . "</br>";

    }

.....

https://ra2kstar.tistory.com/117

 

- 문자열 안에서 특정한 정규식 패턴의 존재 여부를 찾는데 유용한 내장함수입니다.

- 문자열($subject)에 패턴($pattern)과 일치하는 것이 있다면 참을 반환합니다.

- 패턴임을 알리기 위해 앞뒤로 슬래쉬( / )를 붙여줘야 합니다.

- 마지막 슬래쉬 뒤에 여러 가지 옵션을 붙일 수 있습니다.

- 예) /패턴/i 이런 식으로... i는 대소문자를 구분하지 않음을 의미합니다.

- 패턴과 일치하는 데이터가 있다면 $matches 배열에 저장됩니다.

- 첫 번째 배열 요소($matches[0])에는 패턴과 일치하는 데이터가 대입됩니다.

- 두 번째 배열 요소($matches[1])에는 패턴 내에 괄호로 묶인 부분에 해당하는 데이터가 대입됩니다.

 

$subject = "I just want to look forward to the future.";

$pattern = "/([a-zA-Z]+ )+/";

if(preg_match($pattern, $subject, $matches))

    echo "일치하는 패턴이 있습니다. (".$matches[0].")";

else

    echo "일치하는 패턴이 없습니다.";

 

* 패턴에 [a-zA-Z]이면 알파벳 영문 / [가-힣]이면 한글을 검색 혹은 비교할 수 있습니다.

 

* 문자셋이 EUC-KR 경우

/[\xA1-\xFE\xA1-\xFE]/

 

* 문자셋이 UTF-8 경우

$pattern = "/[가-힣 ]+/"; 혹은

$pattern = "/[{\x{1100}-\x{11FF}\x{3130}-\x{318F}\x{AC00}-\x{D7AF} ]+/u";

 

 

대상 문자열을 앞부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지를 찾는 함수 (strpos/strrpos)

strrpos([대상 문자열], [조건 문자열], [검색 시작 위치]) 함수

- strpos()는 대상 문자열을 앞부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지를 찾는 함수입니다.

- strrpos()는 대상 문자열을 뒷부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지를 찾는 함수입니다.

- 두 함수 모두 영문자의 대소문자를 구별하여 검색합니다.

- boolean을 받아올 때, 참이면 '===', 거짓이면 '!=='을 사용해야 합니다.

 

$gp_string = "abc abc abc";

$gp_find = "c";

$pos = strpos($gp_string, $gp_find);

$rpos = strrpos($gp_string, $gp_find);

 

if ($pos === false) {

   echo "strpos() : <br/>\"".$gp_string."\" 문자열에서 \"".$gp_find."\" 문자열을  찾지 못했습니다.<br/><br/>";

} else {

   echo "strpos() : <br/>\"".$gp_string."\" 문자열에서 \"".$gp_find."\" 문자열을 찾았습니다.<br/>";

   echo "찾는 문자열은 ".$pos."번째 위치에 존재합니다.<br/><br/>";

}

if ($rpos === false) {

   echo "strrpos() : <br/>\"".$gp_string."\" 문자열에서 \"".$gp_find."\" 문자열을  찾지 못했습니다.<br/>";

} else {

   echo "strrpos() : <br/>\"".$gp_string."\" 문자열에서 \"".$gp_find."\" 문자열을 찾았습니다.<br/>";

   echo "찾는 문자열은 ".$rpos."번째 위치에 존재합니다.";

}

 

 검색할 문자열($haystack) 내에서 찾을 문자열($needle)이 있는지 검색하는 함수

strstr ($haystack, $needle[, bool $before_needle = false ]) 함수

- 검색할 문자열($haystack) 내에서 찾을 문자열($needle)이 있는지 검색하는 함수입니다.

- 검색은 왼쪽부터 시작되며, 찾은 문자열($needle)부터 문자열($haystack) 마지막까지 반환합니다.

 

$gp_email = "admin@goopia.com";

$gp_domain = strstr($gp_email, '@');

echo "도메인 : ".$gp_domain;

echo "<br/>";

$gp_user = strstr($gp_email, '@', true);

echo "사용자 : ".$gp_user;

 

 대상 문자열을 앞부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지 리턴 (stripos / strripos)

stripos([대상 문자열], [조건 문자열], [시작 위치]) 함수
strripos([대상 문자열], [조건 문자열], [시작 위치]) 함수

- stripos()는 대상 문자열을 앞부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지 리턴합니다.

- strripos()는 대상 문자열을 뒷부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지 리턴합니다.

- 두 함수 모두 영문자의 대소문자를 구별하지 않습니다.

- 시작 위치는 생략 가능하며, 지정할 경우 검색될 문자열 범위는 '시작 위치~마지막'까지가 됩니다..

 

$gp_email = "admin@goopia.com";

$gp_domain = stripos($gp_email, 'a');

echo "stripos : ".$gp_domain;

echo "<br/>";

$gp_domain = stripos($gp_email, 'a', 5);

echo "stripos : ".$gp_domain;

echo "<br/>";

$gp_domain = strripos($gp_email, 'a');

echo "strripos : ".$gp_domain;

echo "<br/>";

$gp_domain = strripos($gp_email, 'a', 12);

echo "strripos : ".$gp_domain;

 

 대상 문자열을 앞부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지 찾음(mb_strpos / mb_stripos)

/ mb_strripos([대상 문자열], [조건 문자열], [시작위치], [인코딩]) 함수

- mb_strpos()와 mb_stripos()는 대상 문자열을 앞부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지 찾습니다.

- mb_strrpos()와 mb_strripos()는 대상 문자열을 뒷부분부터 검색하여 조건 문자열이 몇 번째 위치에 있는지 찾습니다.

- 4개 함수 모두 한글과 같은 2byte짜리 문자가 포함된 문자열을 처리를 하기 위한 함수입니다.

 

$str = "한글 문자열을 검색(search) 혹은 비교하여 원하는 STRING 찾기";

$find = "R";

echo $str."<br/>";

echo "찾는 문자열 : ".$find."<br/>";

echo "mb_strpos : ".mb_strpos($str, $find, 0, "UTF-8")."<br/>";

echo "mb_strrpos : ".mb_strrpos($str, $find, 0, "UTF-8")."<br/>";

echo "mb_stripos : ".mb_stripos($str, $find, 0, "UTF-8")."<br/>";

echo "mb_strripos : ".mb_strripos($str, $find, 0, "UTF-8");

 

 

참고 : http://goopia.com/b/B11-43

'배우고 있습니다 > PHP' 카테고리의 다른 글

[laravel] rules max, count와 mb_strlen  (0) 2024.02.28
[Laravel] $hidden의 의미  (0) 2024.02.06
[PHP 기초] 금칙어 / 단어 필터링  (0) 2019.11.10