可能的PHP函数匹配两个没有正则表达式的关键字

可能的PHP函数匹配两个没有正则表达式的关键字,php,regex,strpos,Php,Regex,Strpos,我一直在使用stripos来匹配字符串中的单个关键字,但是您只能定义输入字符串、要搜索的字符串和偏移量。。。是否有一个功能或方法,我可以要求找到两个关键字。例如“快乐”和“生日”,通过分别定义“快乐”和“生日”来匹配“快乐21岁生日”或“异常快乐的生日”。因此,除非两个关键字都存在,否则匹配结果将返回false。显然正则表达式更有效,但您必须执行以下操作: if(strpos($yourString,"Happy") !== false && strpos($yourString

我一直在使用stripos来匹配字符串中的单个关键字,但是您只能定义输入字符串、要搜索的字符串和偏移量。。。是否有一个功能或方法,我可以要求找到两个关键字。例如“快乐”和“生日”,通过分别定义“快乐”和“生日”来匹配“快乐21岁生日”或“异常快乐的生日”。因此,除非两个关键字都存在,否则匹配结果将返回false。

显然正则表达式更有效,但您必须执行以下操作:

if(strpos($yourString,"Happy") !== false && strpos($yourString,"Birthday") !== false){
    // do stuff
}

显然正则表达式更有效,但您必须:

if(strpos($yourString,"Happy") !== false && strpos($yourString,"Birthday") !== false){
    // do stuff
}

最简单的方法可能只是执行一次和两次
strpo
调用

$twoNeedles = function($n1,$n2,$hay,$caseIns=false)
                {
                  $f = $caseIns ? 'stripos' : 'strpos';
                  return ($f($hay, $n1) !== false) 
                      && ($f($hay, $n2) !== false);};

echo $twoNeedles('Happy', 'Birthday', 'Happy Freakin Birthday d00d'); //true
echo $twoNeedles('Happy', 'Ice Cream', 'Happy Freakin Birthday d00d'); //false
echo $twoNeedles('HaPpY', 'bIrTH', 'Happy Freakin Birthday d00d', true); //true
既然我喜欢过度思考

$manyNeedles =  function($n,$hay,$caseIns=false)
                {
                  $c = $caseIns ? 'stripos' : 'strpos';
                  $f = function($a,$b) use ($c,$hay) 
                         {return $a && ($c($b,$hay) !== false);};
                  return array_reduce($n,$f,true);
                };

$myNeedles = array('happy', 'birthday', 'to', 'you');
echo $manyNeedles($myNeedles, 'hap hap happy birf birthday to j000000 and you');

现在,我最好在使用
内爆
评估
之前退出,而不是减少

最简单的方法可能就是调用两个
strpo

$twoNeedles = function($n1,$n2,$hay,$caseIns=false)
                {
                  $f = $caseIns ? 'stripos' : 'strpos';
                  return ($f($hay, $n1) !== false) 
                      && ($f($hay, $n2) !== false);};

echo $twoNeedles('Happy', 'Birthday', 'Happy Freakin Birthday d00d'); //true
echo $twoNeedles('Happy', 'Ice Cream', 'Happy Freakin Birthday d00d'); //false
echo $twoNeedles('HaPpY', 'bIrTH', 'Happy Freakin Birthday d00d', true); //true
既然我喜欢过度思考

$manyNeedles =  function($n,$hay,$caseIns=false)
                {
                  $c = $caseIns ? 'stripos' : 'strpos';
                  $f = function($a,$b) use ($c,$hay) 
                         {return $a && ($c($b,$hay) !== false);};
                  return array_reduce($n,$f,true);
                };

$myNeedles = array('happy', 'birthday', 'to', 'you');
echo $manyNeedles($myNeedles, 'hap hap happy birf birthday to j000000 and you');

现在我最好先退出,然后再使用
内爆
评估
,而不是减少

!==FALSE
是一个更好的测试。strpos在不匹配时返回false,这将为误报的不平等性转换为0您确定正则表达式更有效吗?
!==FALSE
是一个更好的测试。strpos在不匹配时返回false,这将为误报的不平等性转换为0您确定正则表达式更有效吗?我认为如果字符串开头出现一个单词(偏移量0),这将为您提供一个误报。与
!==false
正确,需要对strpo进行适当的bool类型检查。我认为如果字符串开头出现一个单词(偏移量0),那么这会给您一个假阴性。与
!==false
正确,需要对STRPOST进行适当的bool类型检查,如果“针”位于“干草堆”中的位置0,则该检查将失败。一个或两个
ands
将为0,并且总体计算结果为布尔值false。这将起作用,但我正在寻找最少的代码量,因为我必须实现很多关键字。我不得不投票支持那些很棒的测试字符串。我不确定我是否能连接上。你知道你只需要声明函数一次,对吗?以后再打100次。更重要的是,tho,很高兴您喜欢测试字符串=p如果“针”在“干草堆”中的位置为0,那么它将失败。一个或两个
ands
将为0,并且总体计算结果为布尔值false。这将起作用,但我正在寻找最少的代码量,因为我必须实现很多关键字。我不得不投票支持那些很棒的测试字符串。我不确定我是否能连接上。你知道你只需要声明函数一次,对吗?以后再打100次。更重要的是,tho,很高兴您喜欢测试字符串=P