这是我的字符串:
$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
?
答案 0 :(得分:3)
对于可能更短的解决方案(以及具有更多可能性的解决方案),您应该考虑ArtisiticPhoenix's solution
$blacklist = preg_split('#,\s*#',$CheckForWords);
$text = explode(' ', strtolower($CheckText));
if($contained = array_intersect($blacklist, $text)) {
print_r($contained);
}
代码首先将,
上的黑名单拆分为可选的后续空格。您应该为黑名单找到更好的格式(严格的格式)。
第二行将输入文本拆分为空格,这非常懒惰,但您的示例看起来非常简单,您可以将其扩展为更复杂的输入文本。
array_intersect
检查那些集合中的重叠(本例中为数组),即:输入文本中的所有单词也在黑名单中。
编辑:由于评论而添加了strtolower
答案 1 :(得分:2)
我就是这样做的
$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。