在PHP中查找字符串中的文本

时间:2010-01-20 04:28:03

标签: php string

这应该是非常简单的,但我似乎无法在任何地方找到解释如何做到这一点。 我在PHP中有一个字符串。该字符串可能包含在子字符串“:ERROR:”的某处。我需要找到它是否有该字符串。 strpos()完全达到了这一点,直到今天,“:错误:”是字符串中的第一项,因此strpos()返回0,所以程序一直在运行,认为它有没错。

我不需要替换字符串,也不需要对它进行任何操作,我只需要一个简单的true/false回答“确实:错误:字符串中是否存在?”

4 个答案:

答案 0 :(得分:3)

当找不到字符串时,

strpos会返回false,因此请检查false而不是隐含条件。

if(strpos($string, ':ERROR:') !== false) {
    // Do something...
}

正如Anurag在评论中所说,使用这些函数时,最好进行严格的比较(===而不是仅仅忽略运算符或使用==),因为这是bug的常见来源特别是在PHP中,许多函数可以返回不同类型的值。

答案 1 :(得分:2)

strpos()上的PHP手册:

  

此函数可能返回布尔值FALSE,但也可能返回一个非布尔值,其值为FALSE,例如0或“”。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。

if (strpos($myString, ":ERROR:") !== FALSE) {
  // Error!
}

答案 2 :(得分:1)

您还可以使用鲜为人知的strstr()

来避免strpos()不使用严格类型运算符进行检查的问题

答案 3 :(得分:0)

if(strpos($string, ':ERROR:') !== false){
    //found ':ERROR:' in string
}
  
    

“[strpos()] [r]将位置变为整数。如果未找到needle,strpos()将返回布尔值FALSE。”
    http://php.net/manual/en/function.strpos.php

  

如果位置为0,那么仅使用==或!=将评估0和false作为等效。所以使用===或!==来避免类型强制。