6

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

这是代码:

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

但如果我将 更改$wordbb aa cc ddor bb cc dd aa,它会起作用。我想知道如何解决这个问题。

4

6 回答 6

15

strpos如果您的字符串不存在,将返回 false。否则,它会返回字符串的位置。

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

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

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

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

它甚至在docs中。

于 2012-05-03T17:28:53.867 回答
5

strpos返回 0,因为 'aa' 是第 0 个字符。由于0 == false但不===为假(它不是布尔值),您需要使用===而不是==.

于 2012-05-03T17:29:44.730 回答
3

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

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

Using==是一个松散的比较,任何东西都可以说是真的(除了true, 1, string),例如

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

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

于 2012-05-03T17:29:10.420 回答
3

因为 的位置为aa0,等于false

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

于 2012-05-03T17:29:36.243 回答
1

在搜索字符串前加一个空格,找到多于 0 的位置

if(strpos(" ".$word, 'aa') > 0)
{
    echo "Found it!";
}
于 2019-10-23T08:14:10.853 回答