2015年11月8日

PHP 文字列から文字を検索する

«
»

Pocket

今回は「ある文字列の中に特定の文字があるかどうかを検索する
方法を紹介したいと思います。日本語の文章で説明すると難しいので、
まずはサンプルプログラムをみてみましょう。
 


<?php

$moji = "隣の竹やぶに竹立てかけたのは、竹立てかけたかったから竹立てかけたのさ";

$pos =  mb_strpos($moji, "やぶ"); //$mojiの中に「やぶ」があるか検索

echo $pos;

実行結果

php mb_strpos

解説

PHPであらかじめ用意されている文字列に関する関数であるmb_strposは
mb_strpos(検索対象の文字列,検索したい文字列);
という形式で利用します。
 
関数からの返り値は、検索対象の文字列の最初の文字から、何文字目に
検索したい文字列があったのか
、ということになります。
 
3という数値が表示されていますので「3文字目」に「やぶ」という文字があった
(はじまった)ということを表しています。
 
ただし、以前から書いている通り、プログラミング界では往々にして、
1文字目を0文字目と表現する
ことになっていますので、
実際には4文字目から「やぶ」という文字があります。
この辺りの感覚になれるまでは大変だと思いますが、繰り返し見ていく中で
段々と慣れていきますので安心してください。
 
では、検索したい文字が見つからなかった場合はどうなるでしょうか。

検索したい文字が見つからなかった場合のサンプル


<?php

$moji = "隣の竹やぶに竹立てかけたのは、竹立てかけたかったから竹立てかけたのさ";

$pos =  mb_strpos($moji, "梅"); //$mojiの中に「梅」があるか検索

echo $pos;

実行結果

php 文字列 検索

解説

今度は「梅」という文字を検索しましたが、画面には何も表示されませんでした。
 
実は、見つからなかった場合はfalseという返り値を受け取っています。
ただし、falseはechoしても何も表示されません
そこで、以下の様にサンプルプログラムを修正してみます。
 


<?php

$moji = "隣の竹やぶに竹立てかけたのは、竹立てかけたかったから竹立てかけたのさ";

$pos =  mb_strpos($moji, "梅"); //$mojiの中に「梅」があるか検索

if($pos == false){ //見つからなかった場合
	echo "not found";
}else{ //見つかった場合
	echo $pos;
}

実行結果

PHP mb_strpos 見つからない

解説

今度はnot foundと表示されました。これは、$posがfalseの時に
not foundとechoするようなif文
を書いたからです。
 
今までどおり、見つかった場合は何文字目に見つかったのか、を表示するように
else文を記述しています。

どんなシーンで使えるか?

例えば、会員登録の画面で、メールアドレスに「@」が入力されていなければ
間違った入力をしている
とわかるでしょう。
 
そういったシーンで、入力されたメールアドレスという文字列から、「@」を
検索して、見つからなければ、エラーメッセージを表示するというように
利用することができます。

まとめ

・mb_strpos(検索対象の文字列,検索したい文字列)で文字列の検索ができる
・返り値は対象の文字列の何文字目に見つかったのか
(ただし、実際の文字数−1となる)
・見つからなければfalseを返す

【関連する記事】