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

では、文字列 (または index ) の先頭にあるため-lavender、 strpos が返されます。0-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 に答える
2

strposfalse一致が見つからない場合、または最初に見つかった場合に戻ります0。2 つを区別するには、 を使用します===

ただし、次のように簡単にすることができます。

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

strpos は、文字列内の文字の位置を返します。最初のテスト文字列で'-lavenderは、文字は最初の文字です。

その場合、strpos は最初の文字である 0 を返しています。文字列が見つかったとしても、これは false と評価されます。

ブール比較を行う必要があります:

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