我有这个函数,如果在数组$stopwords
function stopWords($string, $stopwords) {
$stopwords = explode(',', $stopwords);
$pattern = '/\b(' . implode('|', $stopwords) . ')\b/i';
if(preg_match($pattern, $string) > 0) {
return true;
}
return false;
}
似乎工作正常。
问题是,当数组$stopwords
为空(所以没有指定坏词)时,它总是返回true,就像空值被识别为坏词并且它总是返回true(我认为问题就是这个,但也许是另一个)。
有人可以帮我解决这个问题吗?
由于
答案 0 :(得分:6)
我会使用in_array()
:
function stopWords($string, $stopwords) {
return in_array($string, explode(',',$stopwords));
}
这将节省一些时间而不是正则表达式。
编辑:匹配字符串中的任何单词
function stopWords($string, $stopwords) {
$wordsArray = explode(' ', $string);
$stopwordsArray = explode(',',$stopwords);
return count(array_intersect($wordsArray, $stopwordsArray)) < 1;
}
答案 1 :(得分:0)
将$ stopwords作为数组
function stopWords($string, $stopwords) {
//Fail in safe mode, if $stopwords is no array
if (!is_array($stopwords)) return true;
//Empty $stopwords means all is OK
if (sizeof($stopwords)<1) return false;
....
答案 2 :(得分:0)
如果数组$stopwords
为空,则explode(',', $stopwords)
评估为空字符串,$pattern
等于/\b( )\b/i
。这就是为什么如果$stopwords
为空,函数返回true的原因。
最简单的解决方法是添加if
语句来检查数组是否为空。
答案 3 :(得分:-1)
你可以提出这样的条件:
if (!empty ($stopwords)) { your code} else {echo ("no bad words");}
然后要求用户或应用程序输入一些不良单词。