web-dev-qa-db-ja.com

入力文字列に文字列が存在するかどうかを判断するためにstrposを使用する方法は?

$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';

if(!strpos($filename, $match))
    {
    die();
    }
else 
   {
   //proceed
   }

上記のコードでは、ファイル名に「my_upgrade」というテキスト文字列が含まれていない場合、スクリプトを終了しようとしています。ただし、指定された例では、「my_upgrade(1).Zip」には文字列「-my_upgrade」が含まれているため、停止することはありません。

私は何が欠けていますか?

20
Scott B

strposは、文字列が見つからない場合はfalseを返し、0最初に見つかった場合。 identity operator を使用して、2つを区別します。

if (strpos($filename, $match) === false) {

ちなみに、この事実は 公式ドキュメント に赤い背景と感嘆符で文書化されています。

48
phihag

strpos()関数は大文字と小文字を区別します。

_if(strpos($filename, $match) !== false)
        {
        // $match is present in $filename
        }
    else 
       {
       // $match is not present in $filename 
       }
_

大文字と小文字を区別しない場合 use stripos()つまり、文字列が別の文字列内で最初に出現する位置を検索します(大文字と小文字を区別しません)

5
Rishabh
if (strpos($filename, $match) === false)

それ以外の場合、strpos0(一致のインデックス)、つまりfalseを返します。

===演算子は変数のタイプも比較します(ブール!=整数)

5
Maxime Fafard
false === strpos($filename, $match)

strpos関数ドキュメント は、見つからない場合はfalseを返すか、0位置に見つかった場合0(プログラマーは0頻繁に):

Warningこの関数は、ブール値FALSEを返す場合がありますが、FALSEに評価されるブール値以外の値を返す場合もあります。といった 0または""。詳細については、ブールに関するセクションを参照してください。使用 ===この関数の戻り値をテストするための演算子。

2
hakre

いくつかの状況で他のすべてが失敗したときにこれは私のために働いています:

$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
    {
    $checker == true;
    }
if ($checker === false)
{ 
die();
}
else 
{
//proceed
}

または要するに:

$filename = 'my_upgrade(1).Zip';
$match = 'my_upgrade';
$checker == false;
if(strpos($filename, $match))
    {
    $checker == true;
//proceed
 }
if ($checker === false)
{ 
die();
}
0
Atanas Atanasov