PHP 문자열 함수 + 적용사례

직업적으로 코딩을 하는 사람은 아니지만 업무 자동화 등 실무에서 PHP를 이용하고 있는데 PHP 문자열 함수를 어떻게 적용했는지 기록하고자 한다. 정리해놓으면 나도 필요할 때 찾기 좋으니.

PHP 문자열 정리(정제) 함수

문자열을 MySQL DB에 입력하거나 DB검색을 위해 입력받는 경우 여러 오류가 들어가는걸 방지 하기 위해 한번 정제하는 과정이 필요하다. 이에 필요한 함수들이다.

trim() – 앞, 뒤 공백 제거

기능 : 문자열 앞, 뒤의 공백 제거.

사용 예 : $bcd = trim(” 88023727139″);

바코드 입력을 받아서 처리하는 업무가 많은데 가끔씩 공백문자가 끼어드는 경우가 있다. 스캐너로 직접 스캔을 할 때도 종종 있는 일이고 ‘복사 붙여넣기’로 입력한 값의 앞, 뒤에 공백이 끼어들어 나중에 스캐너로 읽은 값과 일치가 되지 않아 에러가 나는 일이 종종 있다.

공정에 웹을 활용할 때는 텍스트 박스로 입력받은 모든 값은 일단 앞 뒤 공백 제거를 하는게 좋다.

대소문자 정리

바코드든, 키보드값이든 입력을 받을 때 대문자, 소문자 중에 하나를 지정하여 받는 경우가 많다.

제품코드의 영문자는 대부분 대문자를 쓰는데 PC든 스마트폰(PDA)이든 Capslock이 눌린 상태에서 바코드 스캐너로 대문자 입력을 받으면 소문자로 입력이 되는 현상이 있다.

SQL을 잘 활용하면 대소문자 구분없이 검색해서 값을 찾을 수 있지만 DB에 입력하는 값은 항상 엄격한 규칙, 엄격한 형식에 따라야 검색의 불편함, 혹시 나중에 예기치 못한 디버깅도 줄일 수 있다.

  • strtoupper() : 문자열의 모든 값을 대문자로 바꾸는 함수.
  • strtolower() : 문자열의 모든 값을 소문자로 바꾸는 함수.

PHP 문자열 연산 함수

substr() – 문자열 추출 함수

여러가지 예제들로 설명하면

$bcd = substr("abcdefg", -1); //returns g
$bcd = substr("abcdefg", -2); //returns fg
$bcd = substr("abcdefg", -3, 1); //returns e
$bcd = substr("abcdefg", 1, 3); //returns bcd

문자열을 자르고, 더하는 함수들이다. (상세 설명 : php.net)

산업적으로 사용할 땐 코드 형식을 변환하거나 제대로 입력받은 코드가 맞는지 검증할 때 사용할 수 있다.

예를 들어,

현재 바코드 앞자리에 바코드 검증을 위한 문자 하나를 넣고 있다 ‘L’이라는 글자로.(Location의 약자)

PHP 문자열 함수 실무 사례

지금 입력받는 바코드가 ‘Location’임을 확인하기 위해 바코드마다 앞 글자에 ‘L’을 모두 써놓았는데 Location 바코드를 입력받아야 하는 상황에서 앞 글자에 ‘L’이 없다면 무효한 값으로 판단하고 에러메시지를 띄운다.

strlen() – PHP 문자열 길이 반환 함수

$len = strlen("300"); //returns 3
$len = strlen("23-234-23"); //returns 9

문자열의 길이를 반환하는 함수이다.

현재 실무에서 substr(), strlen()을 사용해서 입력값 검증을 하는 코드를 쓰고 있다.

    //바코드 유효성 검증
    //시작문자는 L이어야 하고.
    //대시가 2개 들어가야 하며
    //대시 마지막숫자(문자)는 3글자여야 한다.
    //입력값이 유효하면 1 리턴.
    //무효하면 입력값;첫글자;마지막3글자 형식으로 에러값을 리턴.
   
    $array = explode ("-",$str);

    if (($initial=="L") && (strlen($array[2])==3)){
      return 1;
    }else{
      return $str.";".$initial.";".strlen($array[2]);
    }

explode()코드는 아래 설명 참조. ^^;;

explode() – PHP 문자열 나누기 함수

특정 문자열을 기준으로 문자열을 나누어 배열 형태로 반환한다.

아래는 실무에서 실제로 썼던 코드이다.

편의점(GS25등 CVSNET망을 이용하는 택배접수기)에서 택배를 보내면 영수증에 받는사람의 이름이 써져있고 바코드 세줄과 바코드 세줄을 하나로 합친 QR코드가 있다.

이 QR코드에는 정보마다 구분자로 ‘;’이 들어가있고 각 행의 정보는 (편의상 0행부터 시작) 아래와 같다.

  • 0행 : ‘POSTBOX’라는 문자열이 들어있다.
  • 1행 : 송장 번호 (맨 앞자리 하나는 무의미한 숫자)
  • 2행 : 택배 가격 (앞의 5자리 숫자는 의미 없는 숫자, 여섯번째 숫자부터 택배 가격을 의미)

여러개 택배를 보내면 각 수신인별로 송장번호를 정리해서 각 쇼핑몰마다 업로드를 해야 하는데 일일이 수신인 확인하고 그에 맞는 송장번호를 입력하기에는 오입력 우려도 있고 시간소요도 많다.

작업자는 송장 영수증을 수신인 이름으로 가나다순으로 정렬한 다음 수신인 이름에 맞는 QR코드를 찾아 스캔하면 송장번호와 택배비가 MySQL DB에 입력된다.

아래는 그것을 하는 ‘파싱’부분의 함수이다. 실제 사용하고 있는 함수이다.

(입력 받은 값을 사용자의 용도에 맞게 가공하는 과정을 파싱(Parsing)이라 한다.)

function parsing_postbox($qr){

  $qr_array = explode(";",$qr);
  if ($qr_array[0]=='POSTBOX') {
    $tracking = substr($qr_array[1], 1, 12);
    $cost = substr($qr_array[2], 5, 5);

    return array($tracking,$cost);

  }else{
    echo "POSTBOX의 QR코드가 아닙니다";
    return 0;


  }
};

함께 읽어볼만한 글

Leave a Comment