Codice non intercetta parole singole

Con questo codice blocco le parole proibite, ma mi blocca anche i derivati, es: se nel campo scrivo mela me la blocca, ma blocca anche se scrivo, es melassa.

Ho pensato di metterci un \b ma dopo varie prove non so che fare 

$paroleNoGood = array ("mela","pera","pesca","''");
$stringa = $_POST['nome'].' '.$citta.' '.$email.' '.$messaggio;   
foreach($paroleNoGood as $parola){  
   if (stripos($stringa, $parola) !== false){  
      $errore .= "<span class=\"alert-Guest\">&bull;&nbsp;&nbsp;La parola \"<strong>$parola</strong>\" non &egrave; ammessa</span><br /><br />";
   }  
}
inviato 4 anni fa
php
php
6
modificato 4 anni fa
Gianni Tomasicchio
Il tuo codice inserisce anche una parola che dovrebbe invece passare come buona (melassa). Io ho detto \b ma forse esistono altre soluzioni che tu conosci per far si che venga intercettata solo la parola nell'arrayphp 4 anni fa
X 0 X

Il carattere \b ha valore nelle espressioni regolari, dove appunto indica gli estremi di una parola. Devi quindi modificare il controllo per usare preg_match, ad esempio così:

$paroleNoGood = array ("mela","pera","pesca","melassa");
$stringa = "pera e melassa";
foreach($paroleNoGood as $parola){
    if (preg_match("/\b" . $parola . "\b/i", $stringa)){
        echo "La parola \"$parola\" non é ammessa\n";
    }
}
risposto 4 anni fa
Gianni Tomasicchio
X 0 X

Ok funziona perfettamente, volevo chiederti, come vedi nell'array devo inserire parole singole e plurali, es. mela, mele, ecc. non c'è un modo per cambiare solo la parte finale della parola?

Ho provato così ma non funziona:

$paroleNoGood = array ("mel(a|e)","per(a|e)","pesc(a|he)");
risposto 4 anni fa
php
php
6
L'array $paroleNoGood che hai fornito dovrebbe funzionare correttamente.Mario Santagiuliana 4 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda