Кратко
СкопированоАтрибуты minlength
и maxlength
устанавливают минимальное и максимальное количество символов, которые можно ввести в поля <input>
или <textarea>
.
Пример
СкопированоВ этом примере в <input>
можно ввести минимум 4 символа и максимум 8, а в <textarea>
— минимум 50 и максимум 1000.
<input minlength="4" maxlength="8"><textarea minlength="50" maxlength="1000">
<input minlength="4" maxlength="8"> <textarea minlength="50" maxlength="1000">
Теперь создадим поле с паролем и ограничим количество допустимых символов:
<label for="password"> Введите пароль (от 8 до 16 символов):</label><input type="password" id="password" name="password" minlength="8" maxlength="16" required>
<label for="password"> Введите пароль (от 8 до 16 символов): </label> <input type="password" id="password" name="password" minlength="8" maxlength="16" required >
Как пишется
СкопированоЗначения для minlength
и maxlength
— целые числа от 0 и выше. К примеру, 0
, 14
или 1000
. Если не указать значение или задать его неверно, у поля не будет ограничений по длине. Также значение maxlength
не может быть меньше значения minlength
. Поле всегда будет заполнено неправильно, если максимальное значение меньше минимального.
Браузеры используют кодировку UTF-16 для расчёта длины поля. Это значит, что длина равна количеству символов в случае букв, чисел и знаков. Например, если задали minlength
, то поле с введёнными abc
и 123
соответствуют минимальному ограничению по символам.
minlength
и maxlength
часто используют вместе с другим атрибутом required
, который делает поле обязательным.
Валидация
СкопированоВ JavaScript есть специальный интерфейс Validity
, который даёт доступ к проверке полей. С помощью свойств too
и too
можно проверять длину поля с атрибутами minlength
и maxlength
. Оба свойства возвращают true
, если пользователь ввёл слишком много или слишком мало символов, и false
, когда введённые данные правильной длины. Форму лучше валидировать после нажатия на кнопку для отправки данных.
Странности с <input type="number">
СкопированоКогда задаёте ограничения по длине полю с типом number
, атрибуты minlength
и maxlength
не ограничивают минимальное и максимальное количество символов, которое можно ввести с клавиатуры.
Попробуйте ввести в этой демке больше, чем 3 цифры.
<label for="items"> Выберите количество (максимум 999):</label><input type="number" min="1" max="999" maxlength="3" id="items">
<label for="items"> Выберите количество (максимум 999): </label> <input type="number" min="1" max="999" maxlength="3" id="items" >
Чтобы обойти странность, используйте JavaScript или регулярные выражения. К примеру, в это поле можем ввести только 3 символа благодаря обработке события on
. Когда попытаетесь ввести больше символов, скрипт просто не даст это сделать.
<label for="items"> Выберите количество (максимум 999):</label><input type="number" id="items" pattern="\d+" min="1" max="999" onKeyPress="if(this.value.length === 3) return false">
<label for="items"> Выберите количество (максимум 999): </label> <input type="number" id="items" pattern="\d+" min="1" max="999" onKeyPress="if(this.value.length === 3) return false" >
Стилизация
СкопированоПоля с неправильными данными можно стилизовать через псевдоклассы :invalid
или :user
для всех полей или :out
для полей с type
.
К полю, стилизованному через :invalid
, стили применятся в пустом состоянии и в состоянии, когда в него ввели неправильное количество символов.
input:invalid { border-color: #2E9AFF; background-color: rgb(46, 154, 255, 0.1); outline: none;}
input:invalid { border-color: #2E9AFF; background-color: rgb(46, 154, 255, 0.1); outline: none; }
Стили из :user
применятся к полю только тогда, когда пользователь ввёл неверное количество символов и при этом начал взаимодействовать с другими элементами на странице.
input:user-invalid { border-color: #2E9AFF; background-color: rgb(46 154 255 / 0.1); outline: none;}
input:user-invalid { border-color: #2E9AFF; background-color: rgb(46 154 255 / 0.1); outline: none; }