Que tal Luciano, algo que puedes hacer es lo que te muestro en el siguiente código:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script>
function validarTecla(evento) {
// codigoTecla guarda el codigo ASCII de la tecla pulsada.
var codigoTecla = evento.which;
if (
(codigoTecla >= 48 && codigoTecla <= 57) ||
codigoTecla == 8 ||
codigoTecla == 46 ||
codigoTecla == 45
) {
// Retorna true para los números 0-9 únicamente
// Retorna true para las teclas retroceso para borrar, el punto decimal y el signo -
return true;
} else {
// Retorna falso y no se escriben caracteres no numéricos
return false;
}
}
</script>
</head>
<body>
<form>
<label for="age">Edad:</label>
<input type="text" id="edad" onkeypress="return validarTecla(event);" />
<!-- onkeypress="return validarTecla(event); regresa los caracteres permitidos al
input -->
</form>
</body>
</html>
En este caso estoy validando en un campo numérico solo números, el (.) decimal y el signo (-), claro que puede mejorar aún más para que solo acepte el (.) una vez, y el (-) solo al inicio, pero esa es lo que pudieses hacer también con las letras, darle el rango donde están ellas. y pendiente por ejemplo de nuestra (ñ) que están separados del resto de letras. Te dejo un link con los códigos ASCII.
https://elcodigoascii.com.ar/