ホームページ > バックエンド開発 > PHPチュートリアル > 文字列をチェックするときに `strpos() === true` が予期しない結果をもたらすのはなぜですか?

文字列をチェックするときに `strpos() === true` が予期しない結果をもたらすのはなぜですか?

DDD
リリース: 2024-12-29 09:44:16
オリジナル
363 人が閲覧しました

Why Does `strpos() === true` Give Unexpected Results When Checking for Strings?

strpos() と True を厳密に比較すると予期しない結果が生じるのはなぜですか?

質問:

指定されたコードの目的は、受け入れられないものを見つけることです。 $link 変数内の文字列。ただし、$link に「https」が存在する場合でも、コードは「Acceptable」を出力します。この予期しない動作の背後にある理由は何ですか?

$link = 'https://google.com';
$unacceptables = ['https:','.doc','.pdf', '.jpg', '.jpeg', '.gif', '.bmp', '.png'];

foreach ($unacceptables as $unacceptable) {
    if (strpos($link, $unacceptable) === true) {
        echo 'Unacceptable Found<br />';
    } else {
        echo 'Acceptable!<br />';
    }
}
ログイン後にコピー

答え:

その説明は、strpos() 関数の性質にあります。文書化されているように、strpos() は、$link 内で $unacceptable が最初に出現する位置の数値を返します。ただし、元のコードでは、ブール値を持つ true と誤って比較されます。これにより、予期しない結果が生じます。

これを解決するには、代わりに false 以外の値をチェックするように比較を変更する必要があります。 !== false を使用すると、コードは検出された許容できない文字列を正しく識別します。

// ...
if (strpos($link, $unacceptable) !== false) {
ログイン後にコピー

以上が文字列をチェックするときに `strpos() === true` が予期しない結果をもたらすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート