PHP多个“ stripos”语句

时间:2018-06-26 15:19:21

标签: php stripos

我正在尝试在字符串中进行搜索,以找到包含一组单词中的任何一个而没有另一组单词的字符串。

到目前为止,我正在使用嵌套的stripos语句,如下所示:

            if(stripos($name, "Name", true))
            {
                if((stripos($name, "first", true)) || (stripos($name, "for", true)) || (stripos($name, "1", true)))
                {
                    if(stripos($name, "error"))
                    {

这不仅不能真正起作用,而且似乎也很冗长。

有什么方法可以构造一个简单的字符串来表示“如果此字符串包含这些这些单词中的任何一个,但不包含这些这些单词中的任何一个,则执行此操作” ?

2 个答案:

答案 0 :(得分:0)

您可以轻松地将其压缩为这样;

if(
    stripos($name, "Name", true) &&
    (stripos($name, "first", true)) || (stripos($name, "for", true)) || (stripos($name, "1", true)) &&
    stripos($name, "error")
)
{
    /* Your code */
}

您还可以执行以下更好的操作(IMO);

if(
    stristr($name, "Name") &&
    (stristr($name, "first") || stristr($name, "for") || stristr($name, "1")) &&
    stristr($name, "error")
)
{
    /* Your code */
}

答案 1 :(得分:-1)

黑白名单。

$aWhitelist = [ "Hi", "Yes" ];
$aBlacklist = [ "Bye", "No" ];

function hasWord( $sText, $aWords ) {
    foreach( $aWords as $sWord ) {
        if( stripos( $sText, $sWord ) !== false ) {
            return true;
        }
    }
    return false;
}

// Tests
$sText1 = "Hello my friend!"; // No match // false
$sText2 = "Hi my friend!"; // Whitelist match // true
$sText3 = "Hi my friend, bye!"; // Whitelist match, blacklist match // false
$sText4 = "M friend no!"; // Blacklist match // false

var_dump( hasWord( $sText1, $aWhitelist ) && !hasWord( $sText1, $aBlacklist ) );
var_dump( hasWord( $sText2, $aWhitelist ) && !hasWord( $sText2, $aBlacklist ) );
var_dump( hasWord( $sText3, $aWhitelist ) && !hasWord( $sText3, $aBlacklist ) );
var_dump( hasWord( $sText4, $aWhitelist ) && !hasWord( $sText4, $aBlacklist ) );