无法使用strpos

时间:2017-07-10 10:47:54

标签: php

美好的一天,

我有以下字符串: [明星] ALERT [Star] Domoos检测到blabla [blabli]

由于奇怪的原因,下面的代码没有检测到第一个字符处的星号。我在php文档中读到第一个字符的索引为0.但是,如果我正在寻找' [',那么该函数效果很好。

我想要实现的是确保我的字符串的第一个字符真的是*(星号)。奇怪的是,如果我输入$ pos1 = strpos($ inputString,' *',1),则显示位置' 6'将被退回。

我不太明白为什么我的代码无法正常工作(即没有进入' true'条件)

$inputString = '*ALERT*Domoos detects blabla[blabli]';
$pos1 = strpos($inputString, '*', 0);

if ($pos1 == True)
{
echo 'position' . $pos1;
}

您有什么建议可以帮助我克服这个问题吗?

非常感谢您的支持。

6 个答案:

答案 0 :(得分:1)

将条件更改为

if ($pos1 != False)
{
    echo 'position' . $pos1;
}

因为strpos将返回(整数)或False

的位置

答案 1 :(得分:1)

如果你看manual

  

找到第一次出现针的数字位置   haystack string。

在您的测试用例中,数字位置为00 != true

另见手册中的警告:

  

警告此函数可能返回布尔值FALSE,但也可能返回a   非布尔值,其值为FALSE。请阅读有关的部分   布尔值获取更多信息。使用===运算符进行测试   返回此函数的值。

所以你真正想要的条件是:

if ($pos1 !== false)

答案 2 :(得分:1)

你不需要strpos。由于字符串是一个字符数组,所以你可以这样做

$inputString = '*ALERT*Domoos detects blabla[blabli]';
$compare_char= $inputString[0];
if($compare_char=="*"){
    //do something.
 }

正如我想的那样快,而不是搜索strpos

答案 3 :(得分:1)

实际上问题是,当你看到0位置时,你得到的值是0,当你在if condition中用True检查时,它总是会失败,因为 0将被评估为False 即可。要解决此问题,您可以使用

if($pos1 !== False)

答案 4 :(得分:0)

如果您搜索的内容不存在,函数strpos将返回false。所以请按以下方式进行检查:

$inputString = '*ALERT*Domoos detects blabla[blabli]';
$pos1 = strpos($inputString, '*', 0);

return $pos1 !== false ? 'position ' . $pos1 : '..';

答案 5 :(得分:0)

$ pos1返回0,这被视为False所以我们不能把它当作True,所以我们可以使用这里的isset函数。

$inputString = '*ALERT*Domoos detects blabla[blabli]';
 $pos1 = strpos($inputString, '*',0);

if (isset($pos1))
{
   echo 'position' . $pos1;
}