(PHP) 特定の文字列を含むかチェックする方法

(PHP) 特定の文字列を含むかチェックする方法

 

本記事では、
PHPにおいて、特定の文字列を含むかどうかの判定を行う方法を紹介していく。

大別すると、

  • ①正規表現を使わない判定方法と
  • ②正規表現を使う判定方法

の2パターンについて紹介していく。

 

①正規表現を使わない判定方法

正規表現を使わずに特定の文字列が含まれるかどうかの判定を行う場合、
strpos()関数を使用する。

他にも①strpos、②strstr、③preg_matchなどで判定できるが、
上記①②③の中で推奨される方法は、①strpos理由は、strposが最も早いからだ。

PHPマニュアル(strstrt)にもそのように書いてある。

strstr

注意:
もし特定の haystack に needle があるかどうかを調べるだけの場合、 より高速でメモリ消費も少ない strpos() を代わりに使用してください。

引用元:https://www.php.net/manual/ja/function.strstr.php

 

なので、まずは素直にstrposを使いましょう。

 

strpos()の使い方

strposは、検索文字列の中から、検索したい文字列が見つかった位置を「数値」で返すメソッドだ。

https://www.php.net/manual/ja/function.strpos.php

#strpos()の書式

strpos('検索される文字列', '検索する文字列');
  • 該当する文字列が見つかった位置を「数値」で返す
  • 該当する文字列が見つからなかった場合は、「false」を返す。

 

# strposの使用例

$index = strpos('orange','an');  //orangeの中から、anが見つかる位置を返す
echo $index;

//出力結果
2  (インデックス)

 

上記のように、strposは簡単な使い方なので、phpで特定の文字列が含まれるか判定したい場合はstrposを使うと肝に銘じておこう。

 

※strposを使う際は、戻り値を「型までチェック」しよう

strposは該当する文字列が見つかった位置を数値で返すため、
0を返す場合に注意が必要である(文字列が1文字目で見つかった場合)。

phpにおいて、型までチェックしない場合、0とfalseの比較はtrueと判断されるため、せっかく文字列が見つかって戻り値がfalseではないと思っても、戻り値が0であるせいで、コードが意図した動きにならないことがある。

# strposで0とfalseを比較して意図した動きにならない例

if(strpos('abcd','ab') != false){

    //strpos('abcd', 'ab')の戻り値は0なので、
    //「0 != false」 → つまりfalseとなり、この分岐には入らない。
    //strpos('abcd','ab') !== false)として、型まで見るようにすること。

}

 

strposのマニュアルにも書いてあるので、strposを使用する際はぜひ気をつけましょう!
https://www.php.net/manual/ja/function.strpos.php

 

 

正規表現を使って判定する場合

正規表現を使わずに特定の文字列が含まれるかどうかの判定を行う場合の方法は、
preg_matchを使用する。

preg_matchはマッチした場合は1を返す。マッチしなかった場合は0を返す。

if(preg_match('/bc/','検索される文字列')){
   //検索される文字列のなかにbcが含まれている場合
}

if(!preg_match('/bc/',検索される文字列)){
    //検索される文字列のなかにbcが含まれていない場合
}

 

 

 

 

記事が気に入った方はシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。