2011-08-08 14 views
11
$filename = 'my_upgrade(1).zip'; 
$match = 'my_upgrade'; 

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

上記のコードでは、ファイル名に "my_upgrade"という文字列が含まれていないと、スクリプトから抜け出そうとしています。しかし、与えられた例では、 "my_upgrade(1).zip"に文字列 "my_upgrade"が含まれているので、それは死ぬべきではありません。文字列が入力文字列に存在するかどうかをstrposで調べる方法は?

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

+0

strposは、一致の数値位置を返します。それが役立つかどうかはわかりません。 –

答えて

31

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

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

ところで、この事実はofficial documentationで赤い背景と感嘆符に文書化されています。位置0で見つかった場合には見つからないか0ない場合

1
false === strpos($filename, $match) 

strpos functionDocs戻りfalse(プログラマはしばしば0でカウントを開始したい):

この関数はブールFALSE返すことが警告かもしれないが、また、0または""のように、FALSEと評価されるブール値でない値も返します。詳細についてはブーリアンに関するセクションをお読みください。この関数の戻り値をテストするには、===演算子を使用します。

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

そうでない場合、strpos0falseであり、(マッチのインデックス)を返します。

===また、オペレータは、変数の種類を比較する(ブール!=整数)この場合

0

strposは、論理否定を行うときに偽のように変換され、0を返しますされます。ブール値falseを明示的にチェックする必要があります。

1

strpos()機能では大文字と小文字が区別されます。大文字と小文字を区別しない使用するため

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

stripos()を使用すると、別の文字列の中で文字列が最初に出現する位置を検出します(大文字小文字を区別しません)。

関連する問題