本記事では、
PHPにおいて、特定の文字列を含むかどうかの判定を行う方法を紹介していく。
大別すると、
PHPにおいて、特定の文字列を含むかどうかの判定を行う方法は、以下の2パターンがある。
- ①正規表現を使わない判定方法と
- ②正規表現を使う判定方法
の2パターンについて紹介していく。
① 正規表現を使わない判定方法
まずは、
正規表現を使わずに特定の文字列が含まれるかどうかの判定を行う方法を紹介する。
正規表現を使わずに特定の文字列が含まれるかどうかの判定を行う場合、
strpos()関数を使用する。
他にも①strpos、②strstr、③preg_matchなどで判定できるが、
上記①②③の中で推奨される方法は、①strposだ。理由は、strposが最も早いからだ。
PHPマニュアル(strstrt)にもそのように書いてある。
strstr
注意:
もし特定の haystack に needle があるかどうかを調べるだけの場合、 より高速でメモリ消費も少ない strpos() を代わりに使用してください。
なので、まずは素直に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が含まれていない場合
}
PHPにおいて、特定の文字列を含むかどうかの判定を行う方法まとめ
PHPにおいて、特定の文字列を含むかどうかの判定を行う方法をまとめると以下の様になる
① 正規表現を使わない判定方法
strpos()関数を使用する。
② 正規表現を使って判定する方法
preg_match関数を使用する。
関連記事
https://qiita.com/kazu56/items/2c72d187438de07c2503
https://www.php.net/manual/ja/function.strpos.php