我正在尝试在PHP中进行一些验证,其中之一是检查输入的字符串中是否有特定的单词。问题是,当我把指定的单词放在第一位时,我的代码似乎不起作用。
代码如下:
$word = "aa bb cc dd";
if(strpos($word, 'aa') == false)
{
echo "wrong input";
}
但是如果我将$word
更改为 bb aa cc dd
或 bb 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";
}
使用==
是一个松散的比较,任何东西都可以说为真(除了true
,1
,string
),例如
"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!";
}