Questa fa quello che chiedi, occhio che non prende in considerazione le lettere accentate.
codice:
if(preg_match('/^([a-zA-Z0-9\-]+)$/', $stringa)) {
  echo "valida!";
} else {
  echo "non valida!";
}