Restrict keypress against regex

Solution handles range selection and paste events

by pbatey

HTML

<input type="text" onkeypress="updateOk(event)" onpaste="updateOk(event)" placeholder="number with 2 digits"/>

JavaScript

function updateOk(e) {
  var k
  if (e.clipboardData) k = e.clipboardData.getData('text/plain')
  else k = String.fromCharCode(!event.charCode ? event.which : event.charCode)
  const start = e.target.selectionStart
  const end = e.target.selectionEnd
  const v = e.target.value
  const n = v.slice(0,start) + k + v.slice(end)

  if (!/^\d+(?:\.\d{0,2})?$/.test(n)) {
    e.preventDefault()
  }
}