<input type="text" oninput="limitInput(event, { totalDigit: 5, pointAfterDigit: 3 })"
onblur="handleFormatDigital(event, { pointAfterDigit: 3 })" onfocus="clearFormatting(event)">
function limitInput(event, { totalDigit = 0, pointAfterDigit = 0 }) {
let value = event.target.value
console.log(value);
value = value.replace(/^0*(0\.|[1-9])/, "$1")
value = value.replace(/[^\d.]/g, "")
value = value.replace(/^\./g, "")
value = value.replace(/\.{1,}/g, ".")
value = value
.replace(".", "$#$")
.replace(/\./g, "")
.replace("$#$", ".")
let str = ''
for (let i = 0; i < pointAfterDigit; i++) {
str += '\\d'
}
let reg = new RegExp('^(-)*(\\d*)\\.(' + str + ').*$')
value = value.replace(reg, "$1$2.$3")
value = value.indexOf(".") > 0
? value.split(".")[0].substring(0, totalDigit) + "." + value.split(".")[1]
: value.substring(0, totalDigit)
if (pointAfterDigit === 0) value = value.replace('.', '')
event.target.value = value
}
function handleFormatDigital(event, { pointAfterDigit }) {
let value = event.target.value
const formatter = new Intl.NumberFormat(undefined, {
minimumFractionDigits: pointAfterDigit,
maximumFractionDigits: pointAfterDigit
})
event.target.value = formatter.format(value)
}
function clearFormatting(event) {
let value = event.target.value
event.target.value = value.replaceAll(',', '')
}