ララヴェルでは、$string
と$blacklistArray
$string = 'Cassandra is a clean Word so it should pass the check';
$blacklistArray = ['ass','ball sack'];
$contains = str_contains($string, $blacklistArray); // true, contains bad Word
結果として $contains
はtrueであるため、これにはWordのブラックリストが含まれていることが示されます(これは正しくありません)。これは、以下の名前に部分的にass
が含まれているためです
C お尻アンドラ
ただし、これは部分一致であり、Cassandra
は悪いWordではないため、フラグを立てないでください。文字列内の単語が完全に一致する場合にのみ、フラグを付ける必要があります。
これを達成する方法はありますか?
$blacklistArray = array('ass','ball sack');
$string = 'Cassandra is a clean Word so it should pass the check';
$matches = array();
$matchFound = preg_match_all(
"/\b(" . implode($blacklistArray,"|") . ")\b/i",
$string,
$matches
);
// if it find matches bad words
if ($matchFound) {
$words = array_unique($matches[0]);
foreach($words as $Word) {
//show bad words found
dd($Word);
}
}
ドキュメント: https://laravel.com/docs/5.5/helpers#method-str-contains
str_contains
関数は、指定された文字列に指定された値が含まれているかどうかを判断します。
$contains = str_contains('This is my name', 'my');
値の配列を渡して、指定された文字列に値が含まれているかどうかを確認することもできます。
$contains = str_contains('This is my name', ['my', 'foo']);
str_contains()
は、配列ではなく文字列で機能しますが、ループすることができます。
$string = 'Cassandra is a clean Word so it should pass the check';
$blacklistArray = ['ass','ball sack'];
$flag = false;
foreach ($blacklistArray as $k => $v) {
if str_contains($string, $v) {
$flag = true;
break;
}
}
if ($flag == true) {
// someone was nasty
}