Один из вариантов - нарезать от 0-го до 3-го и 4-го символа из строки, а затем проверить, что первый соответствует ^\d*$
(все цифры), а последний символ, если он существует, соответствует [a-z]
(в алфавитном порядке) ):
$('.input-text').on('change', function() {
const val = $(this).val();
if (val.length > 5) {
console.log('Sorry... Maximum of 5 characters allowed');
$(this).val(val.slice(0, 4));
}
const firstFour = val.slice(0, 4);
const fifth = val[4];
if (!/^\d*$/.test(firstFour)) {
console.log('First four must be numeric only');
$(this).val('');
return;
}
if (fifth && !/[a-z]/i.test(fifth)) {
console.log('Fifth must be alphabetical');
$(this).val(firstFour);
}
})
<input class="input-text">
Можно также сделать это в одном регулярном выражении, но тогда вы не сможете разграничить различные виды проблем, которые могут возникнуть у ввода.
Кроме того, нет необходимости в jQuery для чего-то такого тривиального, вы можете удалить зависимость от него и , если хотите, чтобы синтаксис выглядел немного чище:
document.querySelector('.input-text').addEventListener('change', function() {
const val = this.value
if (val.length > 5) {
console.log('Sorry... Maximum of 5 characters allowed');
this.value = val.slice(0, 4);
}
const firstFour = val.slice(0, 4);
const fifth = val[4];
if (!/^\d*$/.test(firstFour)) {
console.log('First four must be numeric only');
this.value = '';
return;
}
if (fifth && !/[a-z]/i.test(fifth)) {
console.log('Fifth must be alphabetical');
this.value = firstFour;
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input class="input-text">