PHP :strpos() を使った文字列の検索で気をつけること

PHPで特定の文字列を含んでいるか確認する関数にstrpos() があります。

「文字列を含むかどうか」だけを調べたいのであれば「strpos()」関数を利用するのが、最も適切です。 単純な文字列検索では、正規表現関数「preg_match()」よりもパフォーマンス的にも優れています。

しかし、この「strpos()」関数は戻り値の振る舞いに注意する必要があります。

・検索文字列が見つかった場合⇛返り値が「文字列が見つかった位置」を整数で返す(開始位置は0) ・検索文字列が見つからなかった場合⇛falseを返す

この振る舞いは「strpos()」関数をifの条件として使用する際に注意が必要です。 なぜなら、整数の「0」はIF判定で「否定」と捉えられ、PHPでは整数「0」はboolean変換において、falseに変換されるからです。

$str = “abcdefg” という文字列に $check = “abc” という文字列が含まれているか判定したいとします。

その場合、以下の処理では正しく判定が行われません。

$str = "abcdefg"; 
$check = "abc"; 

if ( strpos( $str, $chkeck ) ) {
  echo "検索文字列あり";
} else {
  echo "検索文字列なし";  
}

この処理を実行すると戻り値が0となり「検索文字列なし」となってしまいます。

正しくは、以下のように書きます。

$str = "abcdefg"; 
$check = "abc"; 

if ( strpos( $str, $chkeck ) === false ) {
  echo "検索文字列なし";
} else {
  echo "検索文字列あり";  
}