Справочник · JavaScript
Метод trim(): пробелы по краям строки
Метод trim() возвращает новую строку без пробельных символов в начале и в конце: пробелов, табуляций, переносов строк, неразрывных пробелов. Пробелы внутри строки остаются. Это первый шаг обработки почти любого ввода пользователя: перед проверкой на пустоту, сравнением и отправкой на сервер.
' привет '.trim()→'привет'.- Убирает пробелы, \t, \n и неразрывные пробелы по краям.
- Внутри строки ничего не меняется.
trimStartиtrimEnd— только с одной стороны.- Пустое поле:
value.trim() === ''.
Минимальный пример
const input = document.querySelector('#email');
const email = input.value.trim();
if (email === '') {
showError('Введите email');
}Пользователь мог случайно поставить пробел или вставить адрес с переносом строки. Без trim поле из одних пробелов прошло бы проверку на пустоту, а email с пробелом не совпал бы с сохранённым.
Что удаляет trim
| Символ | Удаляется по краям |
|---|---|
| пробел | да |
табуляция \t | да |
перенос строки \n, \r | да |
неразрывный пробел \u00A0 | да |
пробел нулевой ширины \u200B | нет |
Пробел нулевой ширины не считается пробельным символом и остаётся. Он иногда попадает в текст при копировании из мессенджеров; убрать его можно через replace(/\u200B/g, '').
trimStart и trimEnd
' текст '.trimStart(); // 'текст '
' текст '.trimEnd(); // ' текст'
// убрать хвостовые пробелы в каждой строке текста
text.split('\n').map((line) => line.trimEnd()).join('\n');Обрезка с одной стороны нужна, когда отступы в начале значимы: код, стихи, форматированный текст. trimEnd убирает лишние пробелы в конце строк, сохраняя отступы.
Пробелы внутри строки
' Анна Петрова '.trim(); // 'Анна Петрова'
' Анна Петрова '.trim().replace(/\s+/g, ' '); // 'Анна Петрова'trim не трогает середину строки. Чтобы схлопнуть повторяющиеся пробелы, добавь replace с регулярным выражением. Это удобная нормализация имён, адресов и поисковых запросов.
Очистка всех полей формы
form.addEventListener('submit', (event) => {
const data = Object.fromEntries(new FormData(form));
for (const key in data) {
if (typeof data[key] === 'string') data[key] = data[key].trim();
}
if (!data.name) {
event.preventDefault();
showError('Введите имя');
}
});Удобно очищать все текстовые поля разом перед проверкой. Сервер всё равно должен повторять trim и проверку: данные могут прийти не только из твоей формы.
required и поле из пробелов
<input name="name" required pattern=".*\S.*" title="Имя не может состоять из пробелов">Встроенная проверка required считает поле из пробелов заполненным. Атрибут pattern с \S требует хотя бы один непробельный символ. Но надёжнее проверить value.trim() в JavaScript и на сервере.
trim не меняет исходную строку
let name = ' Аня ';
name.trim(); // результат потерян
name = name.trim(); // правильноСтроки в JavaScript неизменяемы, поэтому все строковые методы возвращают новую строку. Результат нужно сохранить в переменную или сразу использовать.
trim или replace
Убрать пробельные символы по краям. Быстро и понятно.
Убрать или схлопнуть пробелы внутри строки.
Частые ошибки
- Проверяют поле на пустоту без trim.
- Вызывают trim и не сохраняют результат.
- Ждут, что trim уберёт пробелы в середине строки.
- Обрезают пароли — пробелы в них могут быть частью пароля.
- Полагаются только на required для поля из пробелов.
Доступность
Не обрезай значение поля прямо во время ввода — курсор может прыгнуть, и человек не поймёт, куда делся пробел. Чисти значение при отправке или при потере фокуса. Сообщения об ошибке «поле пустое» связывай с полем через aria-describedby.
Поддержка браузерами
trim поддерживается всеми браузерами. trimStart и trimEnd — во всех актуальных браузерах.
Практика
Напиши функцию normalizeName(value): убери пробелы по краям, схлопни повторяющиеся пробелы внутри, сделай первую букву каждого слова заглавной. ' анна петрова ' → 'Анна Петрова'. Пустой ввод — null.
Показать решение
function normalizeName(value) {
const clean = value.trim().replace(/\s+/g, ' ');
if (!clean) return null;
return clean
.split(' ')
.map((word) => word[0].toUpperCase() + word.slice(1).toLowerCase())
.join(' ');
}
normalizeName(' анна петрова '); // 'Анна Петрова'Частые вопросы
Что делает метод trim?
Возвращает строку без пробельных символов в начале и конце.
Удаляет ли trim пробелы внутри строки?
Нет. Для этого используй replace(/\s+/g, ' ').
Как проверить, что поле не пустое?
input.value.trim() !== ''.
Удаляет ли trim переносы строк?
Да, переносы и табуляции по краям тоже удаляются.
Чем trimStart отличается от trim?
trimStart убирает пробелы только в начале, trimEnd — только в конце.