Cautare serie de cuvinte intr-un sir in php

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Marius
Mesaje:60

Cautare serie de cuvinte intr-un sir in php

Am o listă de cuvinte spam care se află într-un array. Când un utilizator trimite un text șir, vreau să știu dacă textul conține vreunul din aceste cuvinte. Cum pot face acest lucru eficient?
Am scris acest cod:

Cod: Selectaţi tot

$my_words = 'buy;sell;shop;purchase';
$array_words = explode(';' ,$my_words); //convert the list to an array
$input_text = 'we can sell your products'; //user will input this text

foreach($array_words as $word){
  if(strpos($input_text  ,$word) !== false)   return 'You can't use from this text';
}
Dar dacă am multe cuvinte speciale în array, foreach() încetinește viteza de execuție.

MarPlo Mesaje:4343
Ai putea sa adăugi cuvintele spam într-un șir, cu | ca separator de cuvinte și apoi folosesti Regex pentru a verifica.

Cod: Selectaţi tot

$my_words = 'buy|sell|shop|purchase';

$input_text = 'we can sell your products'; //user will input this text

if(preg_match('#\b(?:'.$my_words.')\b#i', $input_text, $mt)) echo 'Match: '.$mt[0];
else echo 'No match';
Iată o explicație a regex-ului construit și utilizat mai sus:

Cod: Selectaţi tot

/\b(?:buy|sell|shop|purchase)\b/i

\b    marcheaza inceput de cuvant
(?:
  buy
  |    OR
  sell
  |    OR
  shop
  |    OR
  purchase
)
\b    marcheaza sfarsit de cuvant
i    cautarea sa nu fie case-sensitivity