Подстановка шаблона в поле ввода

Пишите ваши предложения здесь.
Ответить
Аватара пользователя
Morfei
Сообщения: 109
Зарегистрирован: 14 апр 2022, 19:13
Имя: Виктор
Откуда: Нерюнгри

Подстановка шаблона в поле ввода

Сообщение Morfei »

Здравствуйте.

Думаю будет полезным еще одно поле. Которое будет упрощать ввод данных документов. Ну и не только ;)
Ситуация следующая. Допустим нужно контролировать правильное заполнение поля серия и номер паспорта. Тут появляется проблема. Паспортов много и шаблон ввода у всех разный. Образцы можно посмотреть https://www.consultant.ru/document/cons ... facd8e950/.
Дак вот поле с динамической маской как бы решает проблему, но при учете, что маска одна. Но паспорта разные и маски разные. Было бы не плохо, чтоб для этих целей было бы поле слева или справа с выпадающим списком в котором можно выбрать документ. И в зависимости от выбора документа в настройках JS поля с динамической маской будет устанавливаться необходимая маска ввода. По типу из примера :

Код: Выделить всё

{
    mask: "*{1,20}[.*{1,20}][.*{1,20}][.*{1,20}]@*{1,20}[.*{2,6}][.*{1,2}]",
    greedy: false,
    clearIncomplete:true,
    onBeforePaste: function (pastedValue, opts) {
      pastedValue = pastedValue.toLowerCase();
      return pastedValue.replace("mailto:", "");
    },
    definitions: {
      '*': {
        validator: "[0-9A-Za-z!#$%&'*+/=?^_`{|}~\-]",
        casing: "lower"
      }
    }
}


Но только для каждого документа своя настройка. Это не будет давать возможности ввести не верный номер.

Тут есть готовые скрипты для проверки правильности ввода ИНН, СНИЛС, ОГРН, ОГРНИП https://gist.github.com/Aleksandr-ru/c9 ... d3006a31fe
Аватара пользователя
Morfei
Сообщения: 109
Зарегистрирован: 14 апр 2022, 19:13
Имя: Виктор
Откуда: Нерюнгри

Re: Подстановка шаблона в поле ввода

Сообщение Morfei »

Пока решил как то так :

Код: Выделить всё

function setRequired() {
  var selectedValue = $("#fields_265 option:selected").text();
  var template = templates[selectedValue] || "";
  
  setTemplate(template);
}

var templates = {
  'Паспорт гражданина СССР': "А{1,1}-Б{2,2} В{6,6}",
  'Загранпаспорт гражданина СССР': "В{2,2} В{6,7}",
  'Свидетельство о рождении': "Г{1,25}",
  'Удостоверение личности офицера': "Б{2,2} В{6,6}",
  'Справка об освобождении из места лишения свободы': "Г{1,25}",
  'Паспорт Минморфлота': "Б{2,2} В{6,6}",
  'Военный билет солдата (матроса, сержанта, старшины)': "Б{2,2} В{6,7}",
  'Дипломатический паспорт гражданина РФ': "В{2,2} В{7,7}",
  'Иностранный паспорт': "Г{1,25}",
  'Свидетельство о регистрации ходатайства о признании иммигранта беженцем': "Г{1,25}",
  'Вид на жительство': "Г{1,25}",
  'Удостоверение беженца в РФ': "Г{1,25}",
  'Временное удостоверение личности гражданина РФ': "Г{1,25}",
  'Паспорт гражданина РФ': "В{2,2} В{2,2} В{6,6}",
  'Загранпаспорт гражданина РФ': "В{2,2} В{7,7}",
  'Свидетельство о рождении, выданное уполномоченным органом иностранного государства': "Г{1,25}",
  'Паспорт моряка': "Б{2,2} В{6,7}",
  'Военный билет офицера запаса': "Б{2,2} В{6,7}",
  'Иные документы, выдаваемые органами МВД': "Г{1,25}"
};

function setTemplate(mask) {
  var fields_266 = $("#fields_266");
  fields_266.inputmask('remove');
  
  if (mask !== "") {
    fields_266.addClass('required');
  
    fields_266.inputmask({
      mask: mask,
      greedy: false,
      clearIncomplete: true,
      onBeforePaste: function (pastedValue, opts) {
        pastedValue = pastedValue.toLowerCase();
      },
      definitions: {
        'А': {
          validator: "[IVXLСivxlc]",
          casing: "upper"
        },
        'Б': {
          validator: "[А-ЯЁа-яё]",
          casing: "upper"
        },
        'В': {
          validator: "[0-9]",
          casing: "upper"
        },
        'Г': {
          validator: "[0-9A-Za-zА-ЯЁа-яё \-]",
          casing: "upper"
        }
      }
    });
  } else {
    fields_266.removeClass('required');
  }
}

$("#fields_265").on('change', function() {
  setRequired();
});

setRequired();
Но поле думается мне будет как то лучшее. :-)
Аватара пользователя
support
Техническая поддержка
Сообщения: 8993
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Подстановка шаблона в поле ввода

Сообщение support »

Вы все верно сделали.
Я не представляю как сделать отдельное поле, что это все можно было настраивать в настройках поля.
В коде все гораздо проще, добавили необходимую строчку и все.
Так я пока отдельное поле не буду делать.
Аватара пользователя
Morfei
Сообщения: 109
Зарегистрирован: 14 апр 2022, 19:13
Имя: Виктор
Откуда: Нерюнгри

Re: Подстановка шаблона в поле ввода

Сообщение Morfei »

Это только просто шаблон ввода :-) А еще есть валидация правильная для ИНН и СНИЛС допустим, там высчитывается по контрольной сумме. :shock: Жаль конечно, что нет возможности упростить. :?
Аватара пользователя
support
Техническая поддержка
Сообщения: 8993
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Подстановка шаблона в поле ввода

Сообщение support »

А зачем все типы данных хранить в одном поле?
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 745
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич

Re: Подстановка шаблона в поле ввода

Сообщение Fait »

Morfei писал(а): 30 ноя 2023, 09:49 Это только просто шаблон ввода :-) А еще есть валидация правильная для ИНН и СНИЛС допустим, там высчитывается по контрольной сумме. :shock: Жаль конечно, что нет возможности упростить. :?
Валидацию можно сделать с помощью поля Ajax запрос. В нём в уже написать все необходимые условия, и оттуда через JS менять атрибуты полей или других элементов.
Аватара пользователя
Morfei
Сообщения: 109
Зарегистрирован: 14 апр 2022, 19:13
Имя: Виктор
Откуда: Нерюнгри

Re: Подстановка шаблона в поле ввода

Сообщение Morfei »

Нет не все типы данных. А чтоб поле проверяло и на стороне сервера при помощи шаблонов, а не только скриптом в браузере клиента. Я имел ввиду чтоб было поле в котором при помощи ajax проверялось на серверной стороне правильность документов при вводе. Там же не просто цифры. :-) Там контрольные суммы. И можно сразу на достоверность проверять. Скрипты есть :
https://murzix.ru/2013/06/%D0%BF%D1%80% ... avascript/
https://murzix.ru/2011/10/%D0%BF%D1%80% ... avascript/
https://murzix.ru/2011/10/%D0%BF%D1%80% ... avascript/
https://murzix.ru/2011/10/%D0%BF%D1%80% ... avascript/
Ну и еще пару документов. И у поля должна быть возможность прятать или показывать выбранные поля ввода и другие в форме смотря какой документ выбран. То есть как бы выбрал документ, нужные поля в форме появились, с нужными шаблонами и проверками на валидность. Даже тут скорее выпадающий список должен быть с такими возможностями . Вот я о чем. :?
Аватара пользователя
support
Техническая поддержка
Сообщения: 8993
Зарегистрирован: 19 окт 2014, 18:22
Имя: Харчишин Сергей
Откуда: Крым, Евпатория

Re: Подстановка шаблона в поле ввода

Сообщение support »

Сама идея в том, чтоб хранить в одном поле ИНН и СНИЛС и паспорт, ну так себе. Это же потом какая путаница будет, чтоб что то найти. Все эти скрипты можно подключить к программе с помощью собственного JS кода и использовать.
Аватара пользователя
Morfei
Сообщения: 109
Зарегистрирован: 14 апр 2022, 19:13
Имя: Виктор
Откуда: Нерюнгри

Re: Подстановка шаблона в поле ввода

Сообщение Morfei »

Я имею ввиду выпадающий список который будет либо показывать либо прятать поля ввода формы которые нужно. Я имел ввиду допустим выпадающий список "Документы удостоверяющие личность". Там их куча и у некоторых есть поля, у некоторых нет определенных полей. Вот их сколько Изображение. По факту нужен выпадающий список в котором каждому параметру можно указать какие у него будут поля доступны, а какие спрятать в форме. И какой будет по умолчанию при открытии формы. А про СНИЛС, ИНН, ОГРН и ОГРНИП я имел виду, чтоб тоже сделать поле, чтоб в настройках можно было указать, что это допустим СНИЛС, ИНН, ОГРН или ОГРНИП и автоматом бы проверялась их валидность. Потому как у них есть контрольные суммы а не только шаблон ввода.
Ответить