sicuro che la condizione sia

!empty($fields[$field_name]) && !preg_match($reg_exp, $fields[$field_name])

?
in questo caso la condizione viene eseguita solo se il campo non è vuoto e se non contiene i caratteri cercati.

in ogni caso per la regexp prova con

codice:
$reg_exp = "#^[a-zA-Z\s0-9_-]+$#";