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


PHP - strpos didn't check first word

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

代码如下:

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

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

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

在这种情况下,"aa"位于字符串的开头,这意味着它位于位置 0;而 0 的计算结果为 false。

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

if(strpos($word, 'aa') === false)
这是因为

strpos返回单词的位置,在本例中为 0。 0 是假的。 == 不会检查相同的匹配项,===会检查。所以使用三等号。

它甚至在文档中。

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

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

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

使用==是一个松散的比较,任何东西都可以说为真(除了true1string),例如

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

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

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

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

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

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