Валидация госномера

149
10 марта 2022, 04:00

Нужно что бы первые 2 символа были буквы, 3-5 были цифры

$(document).on('input', 'input[type="text"]', function () {
  if($(this).val().length <= 2){
    this.value = this.value.replace (/[^а-я ]/g, '');
  }
  if($(this).val().length >= 3 && $(this).val().length < 5){
    this.value = this.value.replace (/[^0-9+]/, '');
  }
});

Пробовал так, почему то после ввода букв цифры удаляют буквы и ввод происходит сначала

другой способ
$(document).on('input', 'input[name="start"]', function (){
    this.value = this.value.replace (/[^А-Яа-я ]/g, '');
    if($(this).val().length == 1){
        $('input[name="center"]').focus();
    }
    });
    $(document).on('input', 'input[name="center"]', function (){
        this.value = this.value.replace (/[^0-9+]/, '');
        if($(this).val().length == 3){
            $('input[name="end"]').focus();
        }
        if($(this).val().length == 0){
            $('input[name="start"]').focus();
        }
    });
    $(document).on('input', 'input[name="end"]', function (){
        this.value = this.value.replace (/[^А-Яа-я ]/g, '');
        if($(this).val().length == 2){
            $('input[name="reg"]').focus();
        }
        if($(this).val().length == 0){
            $('input[name="center"]').focus();
        }
    });
    $(document).on('input', 'input[name="reg"]', function (){
        this.value = this.value.replace (/[^0-9+]/, '');
        if($(this).val().length == 0){
            $('input[name="end"]').focus();
        }
    });
    $('input[type="text"]').keydown(function(){
        $(this).css( "color", "black" ); 
      });

Сами input:

<div class="gos-inp">
    <input type="text" name="start" class="gos-inp_start" maxlength="1" placeholder="А">
    <input type="text" name="center" class="gos-inp_center" maxlength="3" placeholder="001">
    <input type="text" name="end" class="gos-inp_end" maxlength="2" placeholder="АА">
    <input type="text" name="reg" class="gos-inp_reg" maxlength="2" placeholder="27">
    <img src="gos.jpg">
</div>
Answer 1

ГОСТом для использования на знаках разрешены 12 букв кириллицы, имеющие графические аналоги в латинском алфавите — А, В, Е, К, М, Н, О, Р, С, Т, У и Х.
(источник)

Строим вот такую регулярку - ^(а|в|е|к|м|н|о|р|с|т|у|х){1}[0-9]{3}(а|в|е|к|м|н|о|р|с|т|у|х){2}$, где

^ - начало строки
(а|в|е|к|м|н|о|р|с|т|у|х){1} - набор букв по ГОСТу в гос.номере (только одна буква)
[0-9]{3} - группа из трёх чисел (000-999)
(а|в|е|к|м|н|о|р|с|т|у|х){2} - группа из двух букв по ГОСТу
$ - конец строки
ещё добавим флаги:
g - глобальный поиск
i - регистронезависимый шаблон

Результат:

$('input').on('input', function(){ // вешаем обработчик на инпут 
  let val = $(this).val(); // получаем значение в переменную 
  if(val.length === 6) { // нам нужно, чтобы значение было шесть символов в длину 
    if(val.match(/^(а|в|е|к|м|н|о|р|с|т|у|х){1}[0-9]{3}(а|в|е|к|м|н|о|р|с|т|у|х){2}$/gi)) { // запускаем проверку по нашей регулярке 
      $(this).css('color', 'green'); // красим текст инпута в зелёный, если это гос. номер по ГОСТу 
    } else { 
      $(this).css('color', 'darkred'); // красим текст в красный, если нет 
    } 
  } else $(this).css('color', 'inherit'); // если длина значение не шесть символов, то возращаем дефолтный цвет 
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 
 
<input type="text" value="" placeholder="А000АА" maxlength="6" size="6"> 
<select> 
  <option>Тут выбор региона</option> 
</select>

P.s. Я не стал бы колхозить это несколькими инпутами, а выбор региона перенёс бы на список (<select>).

READ ALSO
Закрытие вкладки через консоль

Закрытие вкладки через консоль

Есть какая-то команда, чтобы закрывать вкладку через консоль с использованием таймера типа setTimeOut?

100
Создать значение если оно не найдено

Создать значение если оно не найдено

В ruby есть find or createКак в c# сделать такое же? Единственное что нашёл, это такой хелпер

69
OpenXML ошибка при добавлении ячейки

OpenXML ошибка при добавлении ячейки

Нужно заполнить шаблон xlsx даннымиПользуюсь библиотекой openxml

108