0

这是我的测试查询:

if (strpos($q, '+') > 0 || strpos($q, '-') > 0 || strpos($q, '"') > 0 || strpos($q, '*') > 0) {

    print ("Advanced search operators are being used");

} else {

    print ("Advanced search operators are NOT being used"); 
}

$q = '-lavender' fails
$q = 'burn -lavender' passes

我究竟做错了什么?我想让它在任何时候都通过 + 或 - 在字符串中。

谢谢

4

6 回答 6

7

strpos()false如果没有找到值则返回,否则返回从 开始的位置0

您的比较应该检查返回值是否!== false

if (strpos($q, '+') !== false || strpos($q, '-') !== false || strpos($q, '"') !== false || strpos($q, '*') !== false)

或者

您可以使用regular expression

preg_match('/[-+*"]+/', $q);

更新

NikiC 刚刚引起strpbrk()了我的注意,它将非常适合您:

if (strpbrk ( $q, '-+*"') !== false)

它相当于if上面那个长语句。

于 2012-08-23T20:37:35.230 回答
3
strpos($q, '+') !== false

0是一个有效的位置,第一个。

在与下面的 SO 同志愉快交谈后编辑。

于 2012-08-23T20:37:35.833 回答
2

strposfalse如果没有找到匹配项,或者0在开始时找到匹配项,则返回。要区分两者,请使用===.

但是,它可以变得更容易:

if( preg_match('/[-+"*]/',$q)) {
    echo "Advanced search";
}
于 2012-08-23T20:49:54.260 回答
2

In -lavender, strpos 正在返回0,因为它在字符串(或 index )-的开头找到。0

尝试这个:

strpos($q, '-') !== false
于 2012-08-23T20:37:42.993 回答
2
<?php
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);

// Note our use of ===.  Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($pos === false) {
    echo "The string '$findme' was not found in the string '$mystring'";
} else {
    echo "The string '$findme' was found in the string '$mystring'";
    echo " and exists at position $pos";
}
?>
于 2012-08-23T20:39:08.937 回答
0

strpos 返回字符在字符串中的位置;在第一个测试字符串中,'-lavender字符是第一个。

在这种情况下, strpos 返回 0,即第一个字符。即使找到了字符串,它的评估结果也为假。

您需要进行布尔比较:

if (strpos($q, '-') !== false ...
于 2012-08-23T20:38:53.523 回答