Я лично считаю, что вам следует пересмотреть изменение данных , поскольку вводится. Это необычно и потенциально сбивает с толку. Лучшим методом может быть визуальное уведомление пользователя и, возможно, запрет размытия или просто дезинфекция во время onblur.
В качестве альтернативы, рассмотрите возможность использования onkeydown и верните false, если набран неправильный ключ, который приведет к короткому замыканию при нажатии клавиши полностью и позволит избежать замены текста в поле.
<input type="text" onkeydown="return check(event)">
Хотя вам придется обрабатывать коды клавиш вручную, включая модификаторы (shift, ctrl, ...):
<script>
function check(e) {
var w = e.which;
var k = e.ctrlKey||e.altKey||e.metaKey;
var m = k||e.shiftKey;
return (!k && w>=65&&w<90) // a-z allowing shift
||(!m && w>=48&&w<=57) // 0-9 no modifiers
||(w>=33&&w<=40) // navigation keys
||w==8 // Backspace
||w==9 // Tab
||w==13 // Return
||w==32 // Space
||w==46 // Delete
;
}
</script>