这是我的测试查询:
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
我做错了什么?我希望它能随时传递+或 - 在字符串中。
由于
答案 0 :(得分: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
语句。
答案 1 :(得分:3)
strpos($q, '+') !== false
0
是一个有效的位置,第一个。
在与我的SO同志愉快的交谈后编辑。
答案 2 :(得分:2)
在-lavender
中,strpos返回0
,因为它在字符串的开头(或索引-
)找到0
。
试试这个:
strpos($q, '-') !== false
答案 3 :(得分: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";
}
?>
答案 4 :(得分:2)
strpos
会返回false
,如果在开始时找到0
,则会===
。要区分这两者,请使用if( preg_match('/[-+"*]/',$q)) {
echo "Advanced search";
}
。
然而,它可以变得更容易:
{{1}}
答案 5 :(得分:0)
strpos返回字符串中字符的位置;在第一个测试字符串中,'-lavender
该字符是第一个。
在这种情况下,strpos返回0,这是第一个字符。即使找到了字符串,评估结果为false。
你需要做一个布尔比较:
if (strpos($q, '-') !== false ...