html
<input type="text" onkeyup="walidacja_liczby(this)" onpaste="walidacja_liczby(this)"/>
script.js
function walidacja_liczby(el, float = false) {
if(el.value.length != 0) {
let value = el.value;
let value_parts = [0];
// zamieńmy wszystkie przecinki na kropki
value = value.replace(/\,/g, '.');
// usuńmy wszystkie znaki z wyjątkiem cyfr i kropek
value = value.replace(/[^0-9\.]+/g, '');
// sprawdźmy czy ktoś wpisał kropkę
let dot = value[value.length - 1] == '.' && float ? '.' : '';
if(value) {
// liczba istnieje więc podzielmy ją na części - dla przypadków z wieloma kropkami
value_parts = value.match(/[0-9]+/g);
// pierwszą liczbę trzeba rzutować na całkowitą by wyeliminować przypadek '023'
value_parts[0] = parseInt(value_parts[0]);
}
if(value_parts.length == 1 || value_parts.length > 1 && !float) {
el.value = value_parts[0] + dot;
}
else {
el.value = value_parts[0] + '.' + value_parts[1];
}
}
}