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