6

私はPHPでいくつかの検証を行おうとしています.そのうちの1つは、入力された文字列に特定の単語があるかどうかを確認しています. 問題は、指定した単語を最初に配置すると、コードが機能しないように見えることです。

コードは次のとおりです。

$word = "aa bb cc dd";
if(strpos($word, 'aa') == false)
{
    echo "wrong input";
}

しかし、 を または に変更する$wordbb aa cc ddbb cc dd aa機能します。私はこれをどのように修正するのだろうか。

4

6 に答える 6

15

strpos文字列が存在しない場合は false を返します。それ以外の場合は、文字列の位置を返します。

この場合、'aa' は文字列の先頭にあり、位置 0 にあることを意味します。0 は false と評価されます。

結果に対してブール比較を行う必要があります。

if(strpos($word, 'aa') === false)
于 2012-05-03T17:29:42.963 に答える
6

これstrposは、単語の位置 (この場合は 0) を返すためです。0 は false です。==同一の一致をチェックしません===。したがって、トリプルイコールを使用します。

ドキュメントにもあります。

于 2012-05-03T17:28:53.867 に答える
5

strpos'aa' は 0 番目の文字であるため、0 を返します。0 == falsebut は偽ではありません(ブール値ではありません)ため、代わりに===を使用する必要があります。=====

于 2012-05-03T17:29:44.730 に答える
3

厳密な比較演算子を使用する必要があります。これは同じ型に対して一致するため、使用===するとブール値かどうかがチェックされます。

if(strpos($word, 'aa') === false)
{
    echo "wrong input";
}

の使用は緩い比較です。( 、、 を除いて)==何でも true と言えます。true1string

"false" == false    // true
"false" === false   // false

false を返すブール値に対して文字列を比較しているため、false である理由。

于 2012-05-03T17:29:10.420 に答える
3

の位置aaは 0 であるため、 に等しくなりfalseます。

以下を使用する必要があります。 if(strpos($word, 'aa') === false)

于 2012-05-03T17:29:36.243 に答える