Fai un passo alla volta.
(e inserisci degli alert ad ogni passo)

Anzitutto testare la variabile contro undefined non ha senso: andrebbe casomai testato il campo prima di copiarlo nella variabile.

Poi occorre verificare se la RE e` corretta. Io proporrei
/[a-zA-Z\s]/
(che e` una cosa diversa)

Comunque trasforma il tuo script cosi`:

codice:
function checkdati() {
  alert("inizio funzione");
  var nome = document.frmMail.nome.value;
  var caratteri_reg_expr=/[a-zA-Z\s]/

  if (nome==""){
    alert("nome vuoto");
    return false;
  } else if ( !caratteri_reg_expr.test(nome)) {
    alert("Attenzione! Campo NOME vuoto o incorretto.");
document.frmMail.nome.focus();
    return false;
  }

}
Poi sappimi dire come si comporta nelle varie situazioni (con campo corretto, con campo vuoto, con campo sbagliato, ...)

PS ho spezzato l'if, perche` ho qualche dubbio sulla RE e voglio quindi separare gli effetti. Quando funziona si puo` rimettere assieme.

Ciao
Michele