Está tan bonito y complicado como el mío, además de que falta la permisión de algunas teclas como borrar, por otra parte no basta devolver un false para evitar la inserción de un carácter, para eso sirve preventDefault. La cosa sería más o menos asi:
Código:
function digitos(eve) {
var res = false;
key = (eve.keyCode) ? eve.keyCode : eve.charCode;
if (key==8) res = true;
patron =/\d/;
valor = String.fromCharCode(key);
res = patron.test(valor);
if (!res) eve.preventDefault();
}
Igual aquí falta la permisión de otras teclas. Pero a la conclusión que llego es que el código se ve igual de complicado, talvez más complicado que el mío. Así que para no seguir discutiendo en vano, los que quieran y saben expresiones regulares que lo hagan de ese modo complicado y los que, como yo, no saben expresiones regulares, que lo hagan de mi modo complicado. Suerte!