Come dicevo nel primo messaggio, ho già provato ad annullare il valore del campo dopo che si verifica l'errore, ma forse per il fatto che il valore non viene cambiato manualmente dall'utente, quando si digita per la seconda volta il valore errato l'evento OnChange non si verifica come se l'ultimo valore fosse rimasto quello errato digitato dall'utente.

Credi che onBlur non si verificherà quando si usa la tastiera al posto del mouse?
Il mio problema è saltato proprio per l'uso della tastiera!

E' il caso di richiamare la funzione su tutti e due gli eventi, e se ce ne sono anche degli altri in modo da coprire tutti i casi?