strpos() == false 当针线存在于干草堆字符串的开头时会给出意外的结果[重复]

问题描述 投票:0回答:3
function check($text){
  if(strpos('a', $text) == FALSE && strpos('b', $text) == FALSE){
    echo 'error';
  } else {
    echo 'ok';
  }
}

echo check('text') . "\n";
echo check('asd') . "\n";
echo check('bnm') . "\n";
echo check('test') . "\n";
echo check('abc') . "\n";

直播:http://codepad.org/W025YYuH

为什么这不起作用?本次回归:

1 错误2 错误3 错误4 错误5 错误

但应该是:

1 错误 2 正常 3 正常 4 错误 5 正常

php strpos
3个回答
6
投票

您应该使用

=== FALSE
而不是
== FALSE
,如 文档

中所述

此外,你的论点顺序错误。再次,查阅文档(或者,正如有些人所说,RTM)


2
投票

反转参数的位置,第一个参数是字符串,第二个参数是你要在字符串中搜索的内容。

strpos ( 'The string to search in' ,'the argument of search' )

那么 == 将无法按预期工作 因为 'a' 的位置是第 0 个(第一个)字符。

试试这个:

function check($text){
  if(strpos($text, 'a') === FALSE && strpos($text, 'b') === FALSE){
    echo 'error';
  } else {
    echo 'ok';
  }
}

echo check('text') . "\n";
echo check('asd') . "\n";
echo check('bnm') . "\n";
echo check('test') . "\n";
echo check('abc') . "\n";

1
投票

你的参数搞错了,改成:

 if(strpos($text, 'a') === FALSE && strpos($text, 'b') === FALSE){

另请注意,您需要使用相同的运算符 (===) 检查布尔值

false

© www.soinside.com 2019 - 2024. All rights reserved.