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