Sto facendo un doppio controllo per la validità della la mail e apparentemente uno funziona e l'altro no pur essendo in teoria la regola la stessa..
faccio il controllo del campo quando esco dal campo stesso.
codice:
<input id="client_email" type="text" name="client_email" value="" onblur="checkemail(this.value)" />
function checkemail(email)
{
   var regex=/^[a-zA-Z0-9\.\_]+\@{1}[a-zA-Z0-9]+\.\w{2,4}$/;
   if(client_email.value != "") {
   if(!regex.test(email))
   {
       alert('email non valida');
//	   document.getElementById("client_email").focus();
//	   client_email.value = "";
    }
   }
 }
e questo funziona sempre
poi quando l'utente schiaccia "conferma" per inserire i dati nel DB faccio il secondo controllo, che ti blocca se non è valida facendo comparire una finestra tipo modale, ed è questo

codice:
if ($('#client_email').val() != '') {
   var regex=/^[a-zA-Z0-9\.\_]+\@{1}[a-zA-Z0-9]+\.\w{2,4}$/;
   if(!regex.test(client_email))
   {
       $("#dialog").html('<p>Email non valida</p>')
                   .dialog({
                     modal: true,
                     title: 'email non valida',
                     buttons: {'OK': function() {$("#dialog").dialog('close');} }
                   });
       mostra_pag1();
       return;
//	   document.getElementById("client_email").focus();
//	   client_email.value = "";
   }
    }
ma fallisce anche se metto una mail "buona"