PHP-检查字符串中是否包含任何用逗号分隔的单词


PHP - Check if any of the words seperated by comma is contained in string

以下是我的字符串:

$CheckForWords = "infant, infants, kid, kids, boy, boys, girl, girls, child, childs,
                  children, childrens, junior, juniors, baby, babys, babies, bby43,
                  bbyb43, crib, inf51, grl53, Inf52, infb51, infg51, jnr, inf, youth,
                  jn52,jn54,infg52,ing52,infs,juniro,chd62,chd63,jrcl99";
$CheckText = "Green boy kid boots";

如何检查$CheckForWords中用逗号分隔的单词是否包含在$CheckText中并返回TRUEFALSE

对于可能更短的解决方案(以及更多可能性的解决方案),您应该考虑ArtisticPhoenix的解决方案

$blacklist = preg_split('#,'s*#',$CheckForWords);
$text = explode(' ', strtolower($CheckText));
if($contained = array_intersect($blacklist, $text)) {
     print_r($contained);
}

该代码首先使用可选的以下空格来拆分,上的黑名单。你可能应该为你的黑名单找到一个更好的格式(严格的格式)。

第二行在空格上分割输入文本,这非常懒惰,但您的示例似乎非常简单,您可以将其扩展为更复杂的输入文本。

array_intersect检查那些到集合(在这种情况下是数组)中的重叠,即:输入文本中也在黑名单中的所有单词。

编辑:由于注释

而添加strtolower

就是这样做的

$CheckForWords = preg_replace('/,'s*/','|', $CheckForWords);
if( preg_match( '/('.$CheckForWords.')/i', $CheckText, $match ) ){
    echo $match[1];
}

但前提是$CheckForWords不包含特殊字符。正则表达式匹配的好处是/i标志不区分大小写,$match[1]将是匹配的单词。

基本上你想要一个像这样的regx

'/(infant|infants|kid|kids)/i'

如图所示https://regex101.com/r/wU1iE4/1

作为旁注,您可以在部分单词后添加[^'s]+,以匹配除空格之外的所有内容

例如:

  $CheckForWords = "infant, infants,...";

制作:

 $CheckForWords = "infant[^'s]+,";

infant开始并在空间上停止的任何东西,然而这将导致$match包含所述空间。

但我不知道你是从哪里得到这份名单的,就我个人而言,我只是从regx开始。

如图所示https://regex101.com/r/wU1iE4/3