是否有更好,更快的方法来执行以下操作?
这是一个类中的方法,用于检查注释中是否包含禁止的单词,如果是,则需要手动批准注释。
我真的不想改变我的模型/数据库的工作方式,因此理想情况下需要保留$this->get_words()
(它返回一个具有从DB字段生成的属性的对象数组)。
P.S我知道亵渎过滤器等是不受欢迎的,但在这种情况下它只需要发表评论需要手动批准。
public function check_string($str) {
// Put banned words in an array
$banned_words = [];
foreach ($this->get_words() as $word) {
$banned_words[] = $word->word;
}
$patterns = array(
'/[_.-]/', '/1/', '/3/', '/4/', '/5/', '/6/',
'/7/', '/8/', '/0/', '/z/', '/@/'
);
$replacements = array(
'', 'i', 'e', 'a', 's', 'g',
't', 'b', 'o', 's', 'a'
);
// Turn str into array of individual words
$str_words = explode(" ", $str);
foreach ($str_words as $str_word) {
$str_word = strtolower(preg_replace($patterns,$replacements,$str_word));
if (in_array($str_word, $banned_words, true))
return TRUE;
}
return FALSE;
}
答案 0 :(得分:1)
您可以将坏词和替换词放入文件中。 像这样 -
badword1,replaceword1
badword2,replaceword2
badword3,replaceword3
读取这样的文件并创建一个坏词和替换词 -
的数组$allline_arr = file('bad_word.txt');
$badword_arr = array();
foreach ($allline_arr as $line) {
$badword_arr[] = explode(',', $line);
}
-OR -
$file = fopen("bad_word.txt","r");
$badword_arr = array();
while(! feof($file))
{
$line = fgets($file);
$badword_arr[] = explode(',', $line);
}
fclose($file);
现在你可以按照自己的意愿使用它......
答案 1 :(得分:1)
您可以使用此方法
var bannedWords = ["NO", "NO NAME", "NONAME", "MISS", "MS", "MS.", "MR", "MR.", "MRS", "MRS."];
function checkBannedWords(value) {
var rgx = new RegExp(bannedWords.join("|"), "gi");
if (value.replace(rgx,'*').indexOf('*') != -1) {
return false;
}
return true;
}