检测字符串中+ - “*的使用

时间:2012-08-23 20:35:48

标签: php strpos

这是我的测试查询:

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

我做错了什么?我希望它能随时传递+或 - 在字符串中。

由于

6 个答案:

答案 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 ...