Я бы порекомендовал использовать вместо HTML5 pattern
атрибут и пометить недопустимые поля с помощью соответствующего :invalid
CSS-модификатора.
Разница в том, чтоПользователь может ввести цифры, но не сможет отправить форму.Таким образом он / она знает, что не так, и может исправить свою ошибку.
Демо:
input:invalid {border: 2px solid red;}
<form>
<input type="text" id="name" name="name" placeholder="Your name" pattern="[^\d]+" required>
<input type="submit" />
</form>
Вы также можете добавить пользовательское сообщение проверки:
document.addEventListener('DOMContentLoaded', function() {
document.querySelectorAll('[data-invalid]').forEach(function (input) {
input.addEventListener('invalid', function () {
input.setCustomValidity(input.dataset.invalid);
});
input.addEventListener('input', function () {
input.setCustomValidity('');
})
});
});
input:invalid {border: 2px solid red;}
<form>
<input type="text" id="name" name="name" placeholder="Your name" pattern="[^\d]+" data-invalid="Your name cannot contain numbers!" required>
<input type="submit" />
</form>