以下是我的字符串:
$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
中并返回TRUE
或FALSE
?
对于可能更短的解决方案(以及更多可能性的解决方案),您应该考虑ArtisticPhoenix的解决方案
$blacklist = preg_split('#,'s*#',$CheckForWords);
$text = explode(' ', strtolower($CheckText));
if($contained = array_intersect($blacklist, $text)) {
print_r($contained);
}
该代码首先使用可选的以下空格来拆分,
上的黑名单。你可能应该为你的黑名单找到一个更好的格式(严格的格式)。
第二行在空格上分割输入文本,这非常懒惰,但您的示例似乎非常简单,您可以将其扩展为更复杂的输入文本。
array_intersect
检查那些到集合(在这种情况下是数组)中的重叠,即:输入文本中也在黑名单中的所有单词。
编辑:由于注释
就是这样做的
$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