Grazie x la risposta.

Ho, però, un problema: ho provato ad integrare il tuo controllo su una funzione già esistente, ma il form viene validato senza eseguire il controllo:

codice:
//Validazione form
function validateNumber(fieldObj, customAlert, sep, dec)
{
  // Solo numeri interi
  if (sep.length != 1) re = new RegExp("^\\s*(\\d+)\\s*$", "");
  
  // Numeri interi e float (separatore decimale definito da 'sep')
  else
    {
      if (dec > 0) re = new RegExp("^\\s*(\\d*\\" + sep + "\\d{" + dec + "})\\s*$", "");
      else re = new RegExp("^\\s*(\\d+(\\" + sep + "\\d+)?|\\" + sep + "\\d+)\\s*$", "");
    }
 
  var rt = fieldObj.value.match(re);
  if (!rt)
    {
      if (customAlert.length > 0) alert(customAlert);
      else alert("Il campo '" + fieldObj.name + "' deve contenere un numero!");
 
      fieldObj.value = "";
      fieldObj.focus();
      return(false);
    }

//INIZIO TUO CODICE DI CONTROLLO
      var namePattern = /^BPT_/;
      var nameFields = {};
      
      var fields = f.getElementsByTagName('input');
      for (var i=0; i<fields.length; i++) 
      
      {
            if (namePattern.test(fields[i].name))
            
            {
                if (fields[i].value in nameFields) 
                
                {
                    alert([fields[i].value, ' è un valore ripetuto.'].join(' '));
                    return false;
                } 
                
                nameFields[fields[i].value] = fields[i].name; 
            }
  }  


     // Reimposta il campo senza eventuali spazi in testa e in coda
     fieldObj.value = rt[1];
  
  return(true);
}


// Array con i dati per le validazioni
var validateTypes = new Array(
                              
                             
                             new Array(validateNumber, "ssn",  "PBT_1", "", "", 0,
                                                               "Q_1", "", "", 0,
                                                               "N_1", "", "", 0
                             
                             );  
                             
function submitIt(frmObj)
{
  for ( var n = 0 ; n < validateTypes.length ; n++ )
    {
      var arr = validateTypes[n];
 
      var parms = arr[1];         // Tipo di parametri da passare alla
                                  // funzione di validazione
 
      var cb = parms.length + 1;  // Numero di parametri supplementari
                                  // da passare alla funzione di validazione
 
      for ( var m = 2 ; m < arr.length ; m += cb )
        {
          var sEval = "var rt = arr[0](frmObj[arr[m]]";
 
          for ( var e = 1 ; e < cb ; e++ )
            {
              switch(parms.substr(e - 1, 1))
                {
                  case "s":  // Il parametro è una stringa
                      sEval += ", '" + arr[m + e] + "'";
                      break;
 
                  case "n":  // Il parametro è un numero (intero o float)
                  case "p":  // Il parametro è uno statement
                      sEval += ", " + arr[m + e];
                      break;
                }
            }
 
          eval(sEval + ");");
 
          // Se il corrente test non è riuscito, termina abortendo l'invio del FORM
          if (!rt) return(false);
        }
    }
 
  // Tutte le validazioni sono riuscite, abilita l'invio del FORM
  return(true);
}

....

<form method="POST" action="vai.asp" onsubmit="return(submitIt(this));">