PHPの文字列検索!strpos()で特定の文字が含まれているか判定する方法
生徒
「PHPで文章の中に、特定の文字が入っているか調べる方法はありますか?」
先生
「PHPでは、strpos()を使うと、文字列の中に指定した文字が含まれているかを調べることができます。」
生徒
「文字列って、文章や名前のことですか?」
先生
「はい。文字列とは、名前、メールアドレス、商品名、文章、検索キーワードなど、文字が並んだデータのことです。」
生徒
「検索機能みたいなことができるんですね。」
先生
「その通りです。PHPの文字列検索の基本として、strpos()の使い方を順番に見ていきましょう。」
1. PHPの文字列検索とは?
PHPの文字列検索とは、文字列の中に特定の文字や単語が含まれているかを調べる処理のことです。文字列とは、文字が並んだデータのことで、名前、メールアドレス、商品名、住所、問い合わせ内容、ブログ記事の本文、検索キーワードなどが文字列にあたります。PHPでWebサイトやWebアプリケーションを作るとき、文字列を調べる処理はとてもよく使われます。
たとえば、問い合わせ内容の中に特定の言葉が入っているか確認したい場合、商品名に検索キーワードが含まれているか調べたい場合、メールアドレスに@が含まれているか確認したい場合などがあります。このような場面で役立つのが、PHPのstrpos()関数です。
プログラミング未経験の方は、文字列検索を「文章の中から探したい文字を見つける作業」と考えるとわかりやすいです。紙の本で特定の言葉を探すとき、目で文章を追いながら探します。PHPでは、その作業をプログラムに行わせることができます。strpos()を使うと、指定した文字がどこにあるか、または含まれていないかを判定できます。
2. strpos()とは?特定の文字を探す関数
strpos()は、PHPで文字列の中から特定の文字や単語を検索するための関数です。関数とは、決められた処理を簡単に使えるようにした道具のようなものです。strpos()を使うと、指定した文字が文字列の中にある場合、その文字が最初に見つかった位置を返します。
位置とは、文字列の中で何番目にあるかという意味です。ただし、PHPでは文字の位置を数えるとき、最初の文字を一番ではなくゼロ番として数えます。これは初心者がつまずきやすいポイントです。たとえば、PHPという文字列では、Pがゼロ番、Hが一番、Pが二番になります。
$text = "I like PHP";
$position = strpos($text, "PHP");
echo $position;
7
この例では、I like PHPという文字列の中からPHPを探しています。PHPは文字列の中で七番目の位置から始まるため、結果として七が表示されます。PHPの文字列検索では、この位置の考え方を理解しておくと、strpos()の結果が読みやすくなります。
3. strpos()で文字が含まれているか判定する
strpos()は、文字が見つかった場合に位置を返します。一方、指定した文字が見つからなかった場合はfalseを返します。falseとは、条件が成り立たないことを表す値です。日本語では偽と呼ばれます。PHPで文字列に特定の文字が含まれているか判定する場合は、このfalseかどうかを確認します。
次の例では、文章の中にPHPという文字が含まれているかを調べています。
$text = "PHPを勉強しています";
if (strpos($text, "PHP") !== false) {
echo "PHPという文字が含まれています";
}
PHPという文字が含まれています
ここで大切なのは、!== falseと書いている点です。これは、結果がfalseではない場合という意味です。つまり、文字が見つかった場合に処理を実行します。PHP初心者の方は、strpos()で文字が含まれているか調べるときは、!== falseをセットで使うと覚えると安心です。
4. なぜ!== falseで判定するのか
PHPのstrpos()で特に注意したいのが、見つかった位置がゼロになる場合です。文字列の最初に検索した文字がある場合、strpos()はゼロを返します。ゼロは数字としては正しい位置ですが、条件判定ではfalseに近い扱いをされることがあります。そのため、単純にif (strpos(...))と書くと、文字が最初にあるのに見つからないように判定されることがあります。
これを防ぐために、!== falseを使います。!==は、値だけでなく型も含めて違うかどうかを調べる比較です。型とは、文字列、整数、真偽値など、データの種類のことです。falseとゼロをはっきり区別するために、厳密な比較を使うのが安全です。
$text = "PHP入門";
if (strpos($text, "PHP") !== false) {
echo "見つかりました";
} else {
echo "見つかりませんでした";
}
見つかりました
この例では、PHPが文字列の先頭にあります。そのため、strpos()の結果はゼロになります。しかし、!== falseで判定しているため、ゼロとfalseを区別でき、正しく見つかったと判断できます。PHPの文字列検索では、この書き方がとても重要です。
5. strpos()の基本構文を理解する
strpos()の基本構文は、検索対象の文字列と、探したい文字列を指定する形です。検索対象とは、調べたい文章や文字列のことです。探したい文字列とは、その中に含まれているか確認したい文字や単語のことです。
たとえば、文章の中から特定の単語を探したい場合、最初に文章を指定し、次に探したい単語を指定します。順番を逆にすると正しく検索できないため、初心者の方は「大きい文章の中から、小さい文字を探す」と覚えるとわかりやすいです。
| 書き方 | 意味 |
|---|---|
strpos($text, $keyword) |
$textの中から$keywordを探す |
!== false |
見つからない状態ではないかを確認する |
$message = "今日はPHPの文字列検索を学びます";
$keyword = "検索";
if (strpos($message, $keyword) !== false) {
echo "キーワードが含まれています";
}
キーワードが含まれています
このように、探したい文字を変数に入れて使うこともできます。検索キーワードが画面の入力フォームから送られてくる場合も、同じ考え方で文字列検索を行います。PHPの検索機能や入力チェックを作るときに、strpos()は基本として覚えておきたい関数です。
6. メールアドレスに特定の文字が含まれるか確認する
PHPのstrpos()は、入力チェックにも利用できます。入力チェックとは、ユーザーが入力した内容が正しい形になっているか確認する処理です。たとえば、メールアドレスには一般的に@が含まれます。そのため、簡単な確認として、文字列の中に@が含まれているかを調べることができます。
ただし、実際のメールアドレス確認はもっと細かいルールがあります。ここでは初心者向けに、strpos()で特定の文字が含まれているか判定する基本例として見ていきます。
$email = "user@example.com";
if (strpos($email, "@") !== false) {
echo "メールアドレスに必要な記号が含まれています";
} else {
echo "メールアドレスに必要な記号がありません";
}
メールアドレスに必要な記号が含まれています
この例では、メールアドレスの中から@を探しています。見つかった場合は、必要な記号が含まれていると表示します。PHPでお問い合わせフォームや会員登録フォームを作るとき、入力された文字列を確認する考え方はとても大切です。
7. strpos()は大文字と小文字を区別する
strpos()は、大文字と小文字を区別して検索します。つまり、PHPとphpは別の文字列として扱われます。これは、検索機能を作るときに注意したいポイントです。人間には同じ言葉に見えても、プログラムでは大文字と小文字が違う文字として判断される場合があります。
たとえば、文章の中にPHPと書かれていて、検索キーワードにphpを指定した場合、strpos()では見つからないことがあります。このようなときは、strtolower()で両方を小文字にそろえてから検索すると、表記の違いを気にせず判定できます。
$text = "PHPの基礎を学習中です";
$keyword = "php";
if (strpos(strtolower($text), strtolower($keyword)) !== false) {
echo "大文字小文字を気にせず見つかりました";
}
大文字小文字を気にせず見つかりました
この例では、検索対象とキーワードの両方を小文字に変換してから検索しています。PHPの文字列検索では、大文字小文字を区別したい場合と、区別したくない場合があります。目的に合わせて、strpos()だけで使うのか、strtolower()と組み合わせるのかを選びましょう。
8. 日本語を含む文字列検索で気をつけること
PHPのstrpos()は、日本語を含む文字列でも、特定の文字が含まれているかを判定する用途で使えます。たとえば、文章の中に「予約」や「商品」や「確認」といった言葉が含まれているかを調べることができます。ブログ記事の検索、問い合わせ内容の判定、カテゴリ名の確認などでも考え方は同じです。
ただし、文字の位置を細かく扱う場合は注意が必要です。日本語は英字と違い、一文字を扱う仕組みが複雑になることがあります。特に文字数や位置を正確に数える処理では、文字コードという考え方が関係します。文字コードとは、コンピュータが文字を扱うための決まりのことです。WebサイトではUTF-8がよく使われます。
初心者の段階では、まずstrpos()を使って「含まれているかどうか」を判定する使い方から覚えるとよいでしょう。位置の数え方よりも、!== falseで見つかったかどうかを確認することが大切です。
$text = "この商品は予約できます";
if (strpos($text, "予約") !== false) {
echo "予約に関する文章です";
}
予約に関する文章です
このように、日本語の文章でも、特定の言葉が含まれているかを簡単に確認できます。PHPで記事検索、商品検索、問い合わせ分類、簡単なキーワード判定を行うときに役立ちます。
9. strpos()を使うときの実用ポイント
PHPのstrpos()を使うときは、まず何を探したいのかを明確にすることが大切です。検索対象の文字列が何で、探したい文字列が何なのかを整理してから書くと、プログラムが読みやすくなります。問い合わせ本文から特定の単語を探すのか、商品名からキーワードを探すのか、メールアドレスから記号を探すのかによって、使い方は少しずつ変わります。
また、strpos()の判定では、必ず!== falseを使うことを意識しましょう。特に文字列の先頭に探したい文字がある場合、結果はゼロになります。ゼロを見つからない状態と間違えないために、厳密な比較を使うことが重要です。
PHPの文字列検索は、検索機能、入力チェック、フォーム処理、商品一覧、会員管理、ブログ記事、問い合わせ分類など、さまざまなWeb開発で使われます。難しい処理に見えるかもしれませんが、基本は「文字列の中から文字を探す」というシンプルな考え方です。まずは短い文章で試し、次にメールアドレスや商品名、問い合わせ文など、実際に近いデータで練習すると理解が深まります。
PHP初心者の方は、strpos()、if文、!== falseの三つをセットで覚えるとよいでしょう。文字が含まれているかどうかを調べ、その結果によって表示する内容を変えることで、実用的なPHPプログラムを作れるようになります。文字列操作の基本を身に付けることで、検索しやすく、使いやすいWebサイトや管理画面を作る力につながります。