定義と使い方
- PHPバージョン
- 5+
stripos()関数は、
文字列内から引数として渡された文字列を検索し、最初に見つかった(出現した)文字列のインデックスを返す関数です。
この関数は大文字と小文字を区別しません。
引数として渡された文字列が見つからない場合は、falseを返します。
この関数は、文字列内で大文字と小文字を区別せずに文字の位置を取得したり、文字列が含まれているかどうかを確認したりする際に有用です。
特徴
- 大文字と小文字を区別しません。
- 日本語のようなmulti-byte(マルチバイト)文字列には対応していません。
- 対象となる文字列内で、指定された文字列が最初に出現する位置(インデックス)を返します。
- 指定された文字列が含まれていない場合は、
falseを返します。
基本例
$str = 'Hello, World!';
$substring = 'world'; // 大文字と小文字を区別しません
$pos = stripos($str, $substring);
if ($pos !== false) {
echo "見つかった位置: $pos";
} else {
echo '見つかりませんでした。';
}
// 出力: 見つかった位置: 7
/*
* 注意してください!
* 文字列のインデックスは0から始まります。
* 最初の文字のインデックスは0、2番目の文字のインデックスは1です。
*/
役立つヒント
- 日本語のようなmulti-byte(マルチバイト)文字列では、
mb_stripos()関数を使用してください。 - もし大文字と小文字を区別して文字列内から特定の文字列の位置を取得したい場合は、
strpos()関数を使用してください。
構文
stripos(string $haystack, string $needle, int $offset = 0): int|false
引数
$haystack |
検索対象となる文字列です。 |
|---|---|
$needle |
検索する文字列です。 大文字と小文字は区別されません。 |
$offset |
オプションです。検索を開始する0ベースのインデックスを指定します。
|
戻り値
対象となる文字列内で、指定された文字列($needle)が最初に出現する位置(インデックス)を返します。
文字列の位置は1ではなく、0から始まる点に注意してください。
- 指定された文字列(
$needle)が含まれていない場合は、falseを返します。 - 指定された文字列(
$needle)が空文字列('')の場合は、falseを返します。
注意してください!stripos()関数とは異なり、strpos()関数は、PHP 8より前のバージョンでは、指定された文字列($needle)が空文字列('')の場合にWarningエラーが発生します。
$haystack = 'Hello, World!';
var_dump(stripos($haystack, '')); // bool(false)
var_dump(strpos($haystack, '')); // Warning: strpos(): Empty needle in
変更履歴
| バージョン | 説明 |
|---|---|
| 8.2.0 | PHP 8.2.0以前は、setlocale()の設定によって、一部の非ASCII文字(例:韓国語、日本語、中国語など)の大文字・小文字の比較結果が異なる場合がありました。PHP 8.2.0以降では、ASCII文字のみを大文字・小文字を区別せずに比較します。それ以外の文字は、単純にバイト単位で比較されます。 |
| 8.0.0 | $needleには空文字列('')を指定できます。 |
| 8.0.0 | $needleに整数型(int)の値を渡す機能は、完全にはサポートされなくなりました。 |
| 7.3.0 | $needleに整数型(int)の値を渡す機能は、使用中止(deprecated)となりました。 |
| 7.1.0 | $offset에 음수를 전달할 수 있게 되었습니다. |
注意点
文字列のインデックスは0から始まります。
最初の文字のインデックスは0で、2番目の文字のインデックスは1です。
$newstring = 'abcdef ghijk';
$pos = stripos($newstring, 'a');
var_dump($pos); // int(0)
この関数の戻り値をBoolean型として使用する場合は注意が必要です。
この関数の戻り値を判定する際は、===演算子を使用してください。
stripos()関数は、戻り値として対象となる文字列内で指定された文字列が最初に出現する位置(インデックス)を返します。文字列の位置は1ではなく、0から始まる点に注意する必要があります。
対象となる文字列内で、指定された文字列が先頭に位置していると仮定します。
この場合、戻り値は0になります。
0は==演算子で比較すると、falseとして評価されます。
実際には指定された文字列が存在しているにもかかわらずfalseと判定されてしまうため、戻り値をブール(boolean)型として判定する場合は、厳密な型比較を行う必要があります。そのため、===演算子を使用してください。
Boolean型として使用する場合は、===演算子を使用してください。
$str = 'Hello, World!';
$substring = 'hello';
$pos = stripos($str, $substring);
var_dump($pos); // int(0)
if ($pos === false) {
echo "文字列内に'Hello'が見つかりません。";
} else {
echo "文字列内に'Hello'が含まれています。";
}
// 出力: "文字列内に'Hello'が含まれています。"
例
stripos()関数は、文字列内で部分文字列の位置を検索する際に有用です。この関数の主な特徴は、大文字と小文字を区別しない点にあり、そのため大文字・小文字を意識せずに文字列を検索できます。
ユーザー入力の検索
$user_input = $_GET['search_query'];
$content = 'This is a sample text for searching.';
if (stripos($content, $user_input) !== false) {
echo '検索語が見つかりました。';
} else {
echo '検索語が見つかりませんでした。';
}
大文字と小文字を区別しない文字列チェック
$string = 'むすんで ひらいて てをうって むすんで';
$search_term = 'ひらいて';
if (stripos($string, $search_term) !== false) {
echo '検索語が見つかりました。';
} else {
echo '検索語が見つかりませんでした。';
}
// 出力: '検索語が見つかりました。'
文字列が特定の単語で始まっているかを確認
$string = 'Hello, world!';
$prefix = 'hello';
if (stripos($string, $prefix) === 0) {
echo "文字列は'$prefix'で始まっています。";
} else {
echo "文字列は'$prefix'で始まっていません。";
}
// 出力: "文字列は'hello'で始まっています。"
関連項目
- PHP strpos()関数:特定の文字列の最初の出現位置を探す
- PHP mb_strpos()関数:strpos()の日本語対応機能を提供
- PHP str_contains()関数:大文字と小文字を区別して特定の文字列の含有を確認
- PHP substr()関数:文字列を切り取って抽出する
- PHP mb_substr()関数:substr() による日本語の文字化けを解消する方法
- PHP mb_stripos()関数:stripos()の日本語対応機能を提供
- PHP $_SERVER[‘HTTP_USER_AGENT’]:クライアントのブラウザ情報を取得する変数
- PHP preg_match()関数: 正規表現によるマッチングを行う