PHP - strpos没有检查第一个单词

时间:2012-05-03 17:26:11

标签: php

我正在尝试在PHP中进行一些验证,其中一个是检查输入的字符串中是否有特定的单词。 问题是,当我把指定的单词放在第一位时,我的代码似乎无法工作。

这是代码:

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

但如果我将$word更改为bb aa cc ddbb cc dd aa,则可行。我想知道如何解决这个问题。

6 个答案:

答案 0 :(得分:11)

如果您的字符串不存在,

strpos将返回false。否则,它会返回字符串的位置。

在这种情况下,'aa'位于字符串的开头,这意味着它位于0位置; 0评估为假。

您需要对结果进行布尔比较:

if(strpos($word, 'aa') === false)

答案 1 :(得分:6)

那是因为strpos返回单词的位置,在这种情况下为0. 0是假的。 ==不会检查相同的匹配,===会匹配。所以使用三等于。

甚至在the docs

答案 2 :(得分:5)

strpos返回0,因为'aa'是第0个字符。如0 == false但不===为假(不是布尔值),则需要使用===代替==

答案 3 :(得分:3)

你应该使用严格比较运算符,这将匹配相同的类型,因此使用===将检查它是否是布尔值:

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

使用==是一个宽松的比较,任何事都可以说明是真的(true1string除外),例如。

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

它之所以错,是因为它将字符串与返回false的布尔值进行比较。

答案 4 :(得分:3)

因为aa的位置为0,等于false

你必须使用: if(strpos($word, 'aa') === false)

答案 5 :(得分:0)

在搜索字符串前添加一个空格,并找到0个以上的位置

if(strpos(" ".$word, 'aa') > 0)
{
    echo "Found it!";
}