рони,
Вот такая последовательность.
"a" "1" "2" Ставим курсор между "1" и "2" Backspace "3"
Получаем A23 вместо A32
Не самое оптимальное решение, но лишено этого недостатка
<style>
#mkb10:invalid {
border:1px solid red;
}
</style>
<body>
<label>МКБ 10 <input id=mkb10 type=text pattern="[A-Z]\d\d(\.\d)?" required></label>
<script>
const mkb = document.getElementById('mkb10');
const cyrcode = 'ФИСВУАПРШОЛДЬТЩЗЙКЫМЯГ';
const latcode = 'ABCDEFGHIJKLMNOPQRSTVZU'
let icode = '';
let rcode = '';
mkb.addEventListener('keydown', (e) => {
rcode = '';
icode = e.key;
if (icode.length == 1) {
const ind = cyrcode.indexOf(icode.toUpperCase())
if (ind>=0) {
rcode = latcode[ind];
} else if ('a'<=icode && icode<='z') {
rcode = icode.toUpperCase();
}
if (! (/[A-Z0-9\.]/.test(rcode || icode))) {
e.preventDefault();
}
}
})
mkb.addEventListener('input', (e) => {
if (rcode) {
const is = mkb.value.indexOf(icode)
mkb.value = mkb.value.replace(icode, rcode);
mkb.setSelectionRange(is+1, is+1);
}
})
</script>