我正在尝试在 PHP 中进行一些验证,其中之一是检查输入的字符串中是否有特定的单词。问题是,当我把指定的单词放在第一位时,我的代码似乎不起作用。
这是代码:
$word = "aa bb cc dd";
if(strpos($word, 'aa') == false)
{
echo "wrong input";
}
但如果我将 更改$word为bb aa cc ddor bb cc dd aa,它会起作用。我想知道如何解决这个问题。
我正在尝试在 PHP 中进行一些验证,其中之一是检查输入的字符串中是否有特定的单词。问题是,当我把指定的单词放在第一位时,我的代码似乎不起作用。
这是代码:
$word = "aa bb cc dd";
if(strpos($word, 'aa') == false)
{
echo "wrong input";
}
但如果我将 更改$word为bb aa cc ddor 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
之所以为假,是因为它将字符串与返回假的布尔值进行比较。
因为 的位置为aa0,等于false。
你必须使用:
if(strpos($word, 'aa') === false)
在搜索字符串前加一个空格,找到多于 0 的位置
if(strpos(" ".$word, 'aa') > 0)
{
echo "Found it!";
}