Валидация с setCustomValidity. Можно ли сократить этот код?

Конечно, можно сократить код, используя функциональные возможности JavaScript.

setCustomValidity является методом объектов формы в JavaScript, который используется для установки пользовательского сообщения об ошибке валидации. Часто используется вместе с событием "invalid" для проверки валидности ввода данных в форму.

Упрощение кода можно достичь с помощью использования функции-обертки и объекта, который хранит в себе все правила валидации.

Вот пример кода, который выполняет валидацию с использованием setCustomValidity:

function validateForm(event) {
  const inputs = document.querySelectorAll('input');
  const validationRules = {
    name: {
      pattern: /^[a-zA-Z]{3,}$/,
      message: 'Имя должно содержать не менее трех символов (только буквы)'
    },
    email: {
      pattern: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/,
      message: 'Пожалуйста, введите правильный адрес электронной почты'
    },
    password: {
      pattern: /^(?=.*d)(?=.*[a-z])(?=.*[A-Z])[0-9a-zA-Z]{8,}$/,
      message: 'Пароль должен содержать не менее 8 символов, включая хотя бы одну заглавную букву, одну прописную букву и одну цифру'
    }
  };

  for (let input of inputs) {
    const rule = validationRules[input.name];

    if (rule && !input.value.match(rule.pattern)) {
      input.setCustomValidity(rule.message);
    } else {
      input.setCustomValidity('');
    }
  }
}

const form = document.querySelector('form');
form.addEventListener('invalid', validateForm, true);
form.addEventListener('submit', validateForm);

Этот код создает объект validationRules, который содержит правила валидации для каждого поля формы. Затем он использует querySelectorAll, чтобы выбрать все поля ввода, и проходит по ним с помощью цикла for. Внутри цикла он проверяет, если есть правило валидации для данного поля, и если значение поля не соответствует шаблону, то вызывается setCustomValidity с сообщением об ошибке. Если значение поля соответствует шаблону, то устанавливается пустое сообщение об ошибке с помощью setCustomValidity.

Это более компактный и легко поддерживаемый способ описания правил валидации для формы, и он позволяет добавить или изменить правила валидации всего лишь изменив объект validationRules