Ja da! :)
Man kan f.eks. reagere på onkeydown og kalde en handler som sorterer de anslag fra som ikke falder indenfor de regler du sætter op (event.returnValue = false for dem der ikke skal medtages, såvidt jeg husker). 
Du skal nok også filtrere på andre events (så som onpaste), da der kan komme data i feltet via andre metoder end tastatur...
		
		
	 
	
		
		
			Jeg har flg. formular:
<html>
    <head>
        <title>Test af inputvalidering</title>
        <script language="javascript" src="fieldvalidate.js"></script>
        <script language="javascript">
            function initInput()
            {
                for(var i = 0; i < document.forms[0].elements.length; i++)
                {
                    var elm = document.forms[0].elements[i];
                    if(elm.className == "numinput" || elm.className == "floatinput")
                    {
                        elm.onkeydown = ensureNumeric;
                        elm.onblur = formatNumeric;
                    }
                }
                
                var defCtl = document.forms[0].txtColumns
                if(defCtl)
                {
                    defCtl.focus();
                    defCtl.select();
                }
            }
        </script>
    </head>
    <body onload="initInput()">
        <form>
            <table>
                <tr>
                    <td class="labelcell"><label for="txtColumns">kommatal:</label></td>
                    <td class="inputcell"><input type="text" class="floatinput" value="4" minvalue="1" ID="txtColumns" NAME="txtColumns"/></td>
                </tr>
                <tr>
                    <td class="labelcell"><label for="txtRows">heltal:</label></td>
                    <td class="inputcell"><input type="text" class="numinput" value="3" minvalue="1" ID="txtRows" NAME="txtRows"/></td>
                </tr>
            </table>
        </form>
    </body>
</html>
og mit fieldvalidate-script ser således ud:
// ============================================================
// Sørger for at indholdet i et felt er numerisk.
// Feltet skal være af klassen floatinput eller numinput.
// floatinput tillader 0 eller 1 komma og tal.
// numinput tillader kun tal og altså ikke komma.
// ============================================================
function ensureNumeric()
{
    function isAllowed(ord, allows)
    {
        var bRes = false;
        bRes = allows.indexOf("," + ord + ",") > -1;
        return bRes;
    }
    
    var elm = event.srcElement;
    var ord = event.keyCode;
    var allowed = ",8,9,35,36,37,38,39,40,46,48,49,50,51,52,53,54,55,56,57,96,97,98,99,100,101,102,103,104,105,";
    if(elm.className == "floatinput" && elm.value.indexOf(",") < 0)
        allowed += "110,188,";
        
    if(!isAllowed(ord, allowed))
    {
        event.returnValue = false;
    }
    window.status = ord;
}
// ============================================================
// Formatterer indholdet af et numerisk felt, så det sikres at
// tal indtastet er valide heltal eller kommatal.
// Hvis der på input-feltet er defineret en attribut som hedder
// "minvalue" kan feltets værdi ikke være mindre end denne.
// ============================================================
function formatNumeric()
{
    var elm = event.srcElement;
    
    if(elm)
    {
        var minval = elm.getAttribute("minvalue") + "";
        var v = parseFloat("0" + elm.value.replace(",","."));
        if(minval != "")
            if(v < minval)
                v = parseFloat(minval);                    
        elm.value = v.toString().replace(".",",");
    }
}