А вот гениальное решение (правда не моё)
<input type="text" onkeyup="validate(this)"> даёт возможность вставить одну точку или одну запятую и цифры
<script>
function validate(inp) {
inp.value = inp.value.replace(/[^\d,.]*/g, '')
.replace(/([,.])[,.]+/g, '$1')
.replace(/^[^\d]*(\d+([.,]\d{0,5})?).*$/g, '$1');
}
</script>