티스토리 뷰

반응형

PHP를 다루다 보면 문자열에 특정 단어가 포함되어 있는지 확인해야 하는 경우가 자주 발생합니다. 예를 들어, 제품 키워드에 "별도"라는 단어가 들어 있는지 확인하고, 조건에 따라 다른 값을 처리해야 하는 상황이 있을 수 있습니다. 오늘은 PHP의 유용한 함수인 strpos()를 활용해 이러한 문제를 해결하는 방법을 알아보겠습니다.


문제 상황

예를 들어, 다음과 같은 코드가 있다고 가정해 보겠습니다.

$material = ($key == '⑥별도마감') ? $GuidrailExtraFinish : $material;

이 코드는 $key가 '⑥별도마감'과 정확히 일치할 때만 $material 값을 변경하도록 작성되었습니다. 하지만 실제로는 '별도'라는 단어만 포함되어도 같은 처리가 필요할 수 있습니다. 예를 들어, $key가 '별도작업', '별도지원', '별도비용'처럼 다양한 형태로 주어질 수 있겠죠.

이럴 때 어떻게 하면 $key에 "별도"라는 단어가 포함되어 있는지 확인할 수 있을까요?


PHP에서 문자열 포함 여부를 확인하는 방법

PHP에서는 strpos() 함수를 사용하여 문자열 내 특정 단어가 포함되어 있는지 확인할 수 있습니다. 이 함수는 매우 직관적이고 사용법도 간단합니다. strpos() 함수는 아래와 같은 방식으로 동작합니다.

  • 구문:
    • 문자열: 검색 대상이 되는 문자열입니다.
    • 찾을_문자열: 검색하고자 하는 특정 단어 또는 문자열입니다.
  • strpos(문자열, 찾을_문자열)
  • 반환값:
    • 찾을 문자열이 포함되어 있으면 해당 문자열이 시작되는 위치(0부터 시작하는 정수)를 반환합니다.
    • 문자열이 포함되어 있지 않으면 false를 반환합니다.

실전 코드: "별도" 포함 여부 확인하기

앞서 본 코드를 strpos()로 개선하면 아래와 같이 작성할 수 있습니다.

$material = (strpos($key, '별도') !== false) ? $GuidrailExtraFinish : $material;

위 코드는 $key에 "별도"라는 단어가 포함되어 있으면 $GuidrailExtraFinish 값을 $material에 할당하고, 포함되지 않으면 기존 $material 값을 유지합니다.


코드의 핵심 포인트

  1. strpos()의 반환값 처리:
    • strpos()는 문자열이 처음 등장하는 위치를 반환합니다. 위치값은 0부터 시작하므로, 단순히 if (strpos($key, '별도'))로 확인하면 문자열의 첫 번째 위치(0)에 "별도"가 있을 경우 조건이 거짓으로 평가됩니다.
    • 따라서 반드시 **!== false**를 사용하여 반환값이 false인지 확인해야 합니다.
  2. 조건문 활용:
    삼항 연산자를 사용하여 간결하게 표현했습니다. 상황에 따라 if 조건문으로도 작성할 수 있습니다.
  3. if (strpos($key, '별도') !== false) { $material = $GuidrailExtraFinish; }

왜 strpos()를 선택해야 할까?

PHP에서 문자열 검색을 위한 다른 함수들도 있지만, strpos()는 아래와 같은 이유로 가장 널리 사용됩니다.

  • 속도: 단순한 문자열 검색에서는 strpos()가 가장 빠르게 작동합니다.
  • 간결함: 반환값을 활용한 조건 검사가 직관적이고 코드가 짧아집니다.
  • 유연성: 부분 문자열 검색뿐만 아니라 위치 확인까지 가능해 다양한 상황에 활용할 수 있습니다.

문자열 포함 여부 확인의 다른 활용 사례

"별도"를 포함한 키를 처리하는 것 외에도 strpos()는 다양한 시나리오에서 활용될 수 있습니다.

  1. 사용자 입력 검증:
    특정 금지어(예: 욕설)가 포함된 문자열을 필터링하는 데 유용합니다.
  2. if (strpos($comment, '금지어') !== false) { echo "댓글에 금지어가 포함되어 있습니다."; }
  3. URL 파라미터 확인:
    URL에 특정 키워드가 포함되어 있는지 확인할 때도 유용합니다.
  4. if (strpos($_SERVER['REQUEST_URI'], 'admin') !== false) { echo "관리자 페이지입니다."; }
  5. 파일 형식 검사:
    업로드된 파일 이름에 확장자가 포함되어 있는지 확인할 수 있습니다.
  6. if (strpos($filename, '.jpg') !== false) { echo "이미지 파일입니다."; }

주의해야 할 점

strpos()를 사용할 때 아래 사항들을 유념하세요.

  1. 대소문자 구분:
    기본적으로 strpos()는 대소문자를 구분합니다. 대소문자를 무시하려면 stripos()를 사용하세요.
  2. if (stripos($key, '별도') !== false) { // 대소문자 무시하고 검색 }
  3. 멀티바이트 문자열:
    한글과 같은 멀티바이트 문자열에서는 mb_strpos()를 사용하는 것이 더 안전합니다.
  4. if (mb_strpos($key, '별도', 0, 'UTF-8') !== false) { // 멀티바이트 문자열 검색 }

PHP에서 strpos()는 문자열 처리에 있어 없어서는 안 될 중요한 함수 중 하나입니다. 특히 "별도"처럼 특정 단어의 포함 여부를 조건으로 처리해야 할 때, 코드의 가독성과 효율성을 모두 높일 수 있습니다. 위 예제와 설명을 바탕으로 strpos()를 다양하게 활용해 보세요.

반응형
댓글