我正在尝试在 PHP 中进行一些验证,其中之一是检查输入的字符串中是否有特定的单词。问题是,当我把指定的单词放在第一位时,我的代码似乎不起作用。
这是代码:
$word = "aa bb cc dd";
if(strpos($word, 'aa') == false)
{
echo "wrong input";
}
但如果我将 更改$word
为bb aa cc dd
or bb cc dd aa
,它会起作用。我想知道如何解决这个问题。
我正在尝试在 PHP 中进行一些验证,其中之一是检查输入的字符串中是否有特定的单词。问题是,当我把指定的单词放在第一位时,我的代码似乎不起作用。
这是代码:
$word = "aa bb cc dd";
if(strpos($word, 'aa') == false)
{
echo "wrong input";
}
但如果我将 更改$word
为bb aa cc dd
or bb cc dd aa
,它会起作用。我想知道如何解决这个问题。
strpos
如果您的字符串不存在,将返回 false。否则,它会返回字符串的位置。
在这种情况下,'aa' 位于字符串的开头,这意味着它位于位置 0;和 0 评估为假。
您需要对结果进行布尔比较:
if(strpos($word, 'aa') === false)
那是因为strpos
返回单词的位置,在这种情况下 0。0 是假的。==
不检查相同的匹配项,===
确实。所以使用三等号。
它甚至在docs中。
strpos
返回 0,因为 'aa' 是第 0 个字符。由于0 == false
但不===
为假(它不是布尔值),您需要使用===
而不是==
.
您应该使用严格的比较运算符,这将匹配相同的类型,因此 using===
将检查它是否为布尔值:
if(strpos($word, 'aa') === false)
{
echo "wrong input";
}
Using==
是一个松散的比较,任何东西都可以说是真的(除了true
, 1
, string
),例如
"false" == false // true
"false" === false // false
之所以为假,是因为它将字符串与返回假的布尔值进行比较。
因为 的位置为aa
0,等于false
。
你必须使用:
if(strpos($word, 'aa') === false)
在搜索字符串前加一个空格,找到多于 0 的位置
if(strpos(" ".$word, 'aa') > 0)
{
echo "Found it!";
}