si funziona ti ringrazio...

però non capisco come mai se faccio + controlli mi restituisce sempre il primo e cioè:

if(preg_match("/[§ç!°£$%&\|\/\(\)\=\?\^\[\]\+\*#-\.,;]/i",$mittente) ||
preg_match("/[§ç!°£$%&\|\/\(\)\=\?\^\[\]\+\*#-:\.,;]/i",$messaggio)){
echo "Se uno O l'altro";
}
elseif(preg_match("/[§ç!°£$%&\|\/\(\)\=\?\^\[\]\+\*#-:\.,;]/i",$mittente) and
preg_match("/[§ç!°£$%&\|\/\(\)\=\?\^\[\]\+\*#-:\.,;]/i",$messaggio)){
echo "Se uno E l'altro";
}
else{
echo "nessuno dei due";
}

nel primo è con or ||
nel secondo con and &&

come mai mi restituisce sempre il primo controllo,anche se nelle 2 input inserisco volontariamente gli errori?

Non so se mi sono spiegato...