我有以下php代码在字符串中查找坏词。
停止发现第一个坏词并返回true。
坏词以逗号分隔列表的形式提供,转换为数组。
$paragraph = "We have fur to sell";
$badWords = "sis, fur";
$badWordsArray = explode(",", $badWords);
function strpos_arr($string, $array, $offset=0) { // Find array values in string
foreach($array as $query) {
if(strpos($string, $query, $offset) !== false) return true; // stop on first true result for efficiency
}
return false;
}
strpos_arr($paragraph, $badWordsArray);
问题是如果提供的坏词是另一个词的一部分,它也会返回true。
我更喜欢使用 strpos 。 还请建议是否有更有效的方法来查找坏词。
答案 0 :(得分:2)
尝试使用reqular表达式:
$paragraph = "We have fur to sell";
$badWords = "sis, fur";
$badWordsArray = preg_split('/\s*,\s*/', $badWords, -1, PREG_SPLIT_NO_EMPTY);
var_dump($badWordsArray);
function searchBadWords($string, $array, $offset=0) { // Find array values in string
foreach ($array as $query) {
if (preg_match('/\b' . preg_quote($query, '/') . '\b/i', $string)) return true; // stop on first true result for efficiency
}
return false;
}
var_dump(searchBadWords($paragraph, $badWordsArray));
<强>解释强>
首先。我们想要正确地拆分$badWords
字符串:
$badWordsArray = preg_split('/\s*,\s*/', $badWords, -1, PREG_SPLIT_NO_EMPTY);
这样我们就可以正确地将"sis, fur"
和"sis , fur"
甚至"sis , , fur"
等字符串拆分为array('sis', 'fur')
。
然后我们使用\b
元字符执行精确单词的正则表达式搜索。这意味着word-boundary
就正则表达而言,就是 word-characted 和非单词字符之间的位置。
答案 1 :(得分:0)
只需在搜索字符串中包含空格。
$paragraph = "We have fur to sell";
$badWords = "sis, fur";
$badWordsArray = explode(",", $badWords);
function strpos_arr($string, $array, $offset=0) { // Find array values in string
$string = " ".$string." ";
foreach($array as $query) {
$query = " ".$query." ";
if(strpos($string, $query, $offset) !== false) return true; // stop on first true result for efficiency
}
return false;
}
strpos_arr($paragraph, $badWordsArray);