Laravel(PHP)で文字列に複数の指定した値が含まれるかを判定するスマートな方法

はじめに

開発をしていると文字列に指定した値が含まれるかを判定する機会が出てきます。

PHPの場合、方法は何種類かありますが、よく行うものとして、mb_strpos()を使った判定です。

$title = '株式会社カサレアル ビジネスソリューション部メンバーによるブログ';
if (mb_strpos($title, 'カサレアル') !== false || mb_strpos($title, 'ブログ') !== false) {
    echo 'true';
} else {
    echo 'false';
}
// 結果: true ('カサレアル' と 'ブログ' のどちらかを含む)

PHP 8 以上であれば、str_contains()を使い、もう少し、シンプルに記述できます。

$title = '株式会社カサレアル ビジネスソリューション部メンバーによるブログ';
if (str_contains($title, 'カサレアル') || str_contains($title, 'ブログ')) {
    echo 'true';
} else {
    echo 'false';
}
// 結果: true ('カサレアル' と 'ブログ' のどちらかを含む)

ただ、どちらも、判定する値が増えた場合、同じ様な判定式を複数記述する必要があり、冗長になりがちです。

Laravelのヘルパを使ったスマートな方法

そこで、もし、PHPのフレームワークにLaravelを利用している場合、ヘルパのStr::contains()を使う事で、
簡潔に記述する事が出来ます。(要 Laravel 5.7 以上)

use Illuminate\Support\Str;

$title = '株式会社カサレアル ビジネスソリューション部メンバーによるブログ';
if (Str::contains($title, ['カサレアル', 'ブログ'])) {
    echo 'true';
} else {
    echo 'false';
}
// 結果: true ('カサレアル' と 'ブログ' のどちらかを含む)

また、指定した全ての値を含むかの判定をしたい場合、Str::containsAll()を使う事で簡潔に記述する事が出来ます。
(要 Laravel 5.8 以上)

use Illuminate\Support\Str;

$title = '株式会社カサレアル ビジネスソリューション部メンバーによるブログ';
if (Str::containsAll($title, ['カサレアル', 'ブログ'])) {
    echo 'true';
} else {
    echo 'false';
}
// 結果: true ('カサレアル' と 'ブログ' の両方を含む)

 もし、Laravelを利用していない場合は?

同様の事をLaravelを利用していないPHPで行う場合、LaravelのヘルパのStrクラスで
実装されているロジックが参考になる為、リンクを載せておきます。

※Laravel側の修正でリンク先の行番号が変わる可能性がありますが、ご了承下さい

終わりに

PHPマニュアルと同様に、Laravelもマニュアルが充実している為、たまに眺めてみると
今まで知らなかった便利な機能に出会えたりするので、オススメです。


--------------------------
システム開発のご要望・ご相談はこちらから