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 "検索文字列あり"; }