web-dev-qa-db-ja.com

Laravel 5.5-文字列に正確な単語が含まれているかどうかを確認します

ララヴェルでは、$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ではないため、フラグを立てないでください。文字列内の単語が完全に一致する場合にのみ、フラグを付ける必要があります。

これを達成する方法はありますか?

5
Wonka
$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);
  }

}
3
Diego Cespedes

ドキュメント: 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']);
8
set0x

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
}
2
Tpojka