PHP - 检查字符

时间:2016-07-28 16:56:19

标签: php

这是我的字符串:

$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

2 个答案:

答案 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。

如此处所见 https://regex101.com/r/wU1iE4/3