停用词功能
我有这个函数,如果在数组 $stopwords
中找到一个坏词,它会返回 true,
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 (我认为问题是这个,但也许是另一个)。
谁能帮我解决这个问题吗?
谢谢
I have this function that returns true if one of the bad words is found in the array $stopwords
function stopWords($string, $stopwords) {
$stopwords = explode(',', $stopwords);
$pattern = '/\b(' . implode('|', $stopwords) . ')\b/i';
if(preg_match($pattern, $string) > 0) {
return true;
}
return false;
}
It seems to work fine.
The problem is that when the array $stopwords
is empty ( so no bad words specified ), it always returns true, like if the empty value is recognized as a bad word and it always returns true ( I think the issue it's this but maybe is another one ).
Can anyone help me sorting out this issue?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我会使用
in_array()
:这将节省一些时间而不是正则表达式。
编辑:匹配字符串中的任何单词
I would use
in_array()
:This will save some time instead of the regexp.
EDIT: to match any word in the string
将 $stopwords 作为数组提供
Give $stopwords as an array
如果数组
$stopwords
为空,则explode(',', $stopwords)
计算结果为空字符串,并且$pattern
等于/\b( )\b/i
.这就是为什么如果$stopwords
为空,您的函数会返回 true 的原因。解决这个问题最简单的方法是添加一个
if
语句来检查数组是否为空。If the array
$stopwords
is empty, thanexplode(',', $stopwords)
evaluates to an empty string and$pattern
equals/\b( )\b/i
. This is the reason why your function returns true if$stopwords
is empty.The easiest way to fix it is to add an
if
statement to check whether the array is empty or not.你可以设置这样的条件:
然后要求用户或应用程序输入一些脏话。
You can put a condition like this:
And then ask the user or application to input some bad words.