我有一個(gè) 70 個(gè)單詞的列表。該列表用于檢查用戶輸入。用戶輸入是文本,平均有 30-100 個(gè)單詞。如果我的列表中的單詞之一出現(xiàn)在文本中,則用戶文本將被刪除,否則是允許的。在大多數(shù)情況下這是允許的,因此它將循環(huán)遍歷所有單詞。要檢查這些單詞是否在我使用的用戶文本中:$susWords = SuspiciousWord::where('checked', true)->get();$foundSusWord = false;foreach ($susWords as $word) { if (preg_match_all("/" . $word->word . "/i", $user->flirttext)) { $foundSusWord = true; break; }} 在正則表達(dá)式和性能方面,我不是專家。性能可能是這里的一個(gè)問題嗎?
3 回答

紫衣仙女
TA貢獻(xiàn)1839條經(jīng)驗(yàn) 獲得超15個(gè)贊
用于
stripos($user->flirttext, $word->word) !== false
更快地檢查,因?yàn)椴恍枰齽t表達(dá)式。用于
preg_match('/\b(' . implode('|', array_column($susWords, 'word')) . ')\b/', $user->flirttext)
一次檢查所有單詞

呼啦一陣風(fēng)
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

翻閱古今
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
如果文本中只有標(biāo)點(diǎn)符號(hào),這種方法并不是很好。在這種情況下根本不應(yīng)該使用。留在這里作為參考
您還可以使用 array_intersect 來避免循環(huán):
$wordlist = explode(' ', $user->flirttext));
if (count(array_intersect($susWords, $wordlist)) > 0) {
? ? // found a bad word, do something
}
- 3 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報(bào)
0/150
提交
取消