trim()
Функция trim() в PHP удаляет пробелы или другие указанные символы с обоих концов строки. В этой статье мы рассмотрим её использование.
Введение
Функция trim() в PHP удаляет пробельные символы (или другие указанные вами символы) с обоих концов строки — начала и конца. Это одна из наиболее часто используемых строковых функций, поскольку текст из форм, файлов и HTTP-запросов почти всегда содержит лишние пробелы, табуляции или переносы строк по краям.
В этой главе рассматриваются синтаксис функции, символы, которые trim() удаляет по умолчанию, способ задания собственного набора символов для удаления, отличия trim() от ltrim() и rtrim(), а также наиболее распространённые ошибки.
Синтаксис
trim(string $string, string $characters = " \n\r\t\v\x00"): string| Параметр | Описание |
|---|---|
$string | Входная строка для обрезки. |
$characters | Необязательный. Набор символов для удаления. Если не указан, используется стандартный набор пробельных символов. |
Функция возвращает новую, обрезанную строку — она не изменяет исходную переменную $string (строки в PHP передаются по значению).
По умолчанию trim() удаляет следующие символы с обоих концов:
| Символ | Значение |
|---|---|
" " | Обычный пробел |
"\t" | Табуляция |
"\n" | Перевод строки |
"\r" | Возврат каретки |
"\0" | Байт NUL |
"\x0B" (\v) | Вертикальная табуляция |
Базовый пример
Удалить начальные и конечные пробелы из строки:
Квадратные скобки выводятся только для наглядности — они подтверждают, что пробелы с обеих сторон удалены, а внутренний пробел (Hello, world!) сохранён.
Удаление пользовательских символов
Второй аргумент позволяет точно указать, какие символы следует удалять. Это удобно для очистки разделителей, слешей или кавычек:
<?php
echo trim("xxxHello worldxxx", "x"), "\n"; // Hello world
echo trim("/var/www/html/", "/"), "\n"; // var/www/html
echo trim("###Section###", "#"), "\n"; // SectionМожно передать сразу несколько символов — trim() удаляет любой из них с каждого конца строки, пока не встретит символ, не входящий в набор:
<?php
echo trim("**[Note]**", "*[]"); // NoteОбратите внимание: обрабатываются только концы строки — скобки внутри неё остаются нетронутыми, точно так же, как внутренний пробел в первом примере.
Диапазоны символов с помощью ".."
В аргументе $characters можно указать диапазон символов с помощью двух точек. Например, чтобы удалить управляющие символы ASCII:
<?php
$dirty = "\x01\x02Hello\x03";
echo trim($dirty, "\x00..\x1F"); // Hellotrim() vs ltrim() vs rtrim()
trim() работает с обоими концами строки. Если нужна обрезка только с одной стороны, используйте соответствующие функции:
| Функция | Удаляет с |
|---|---|
trim() | обоих концов |
ltrim() | левого конца (начала) |
rtrim() | правого конца (конца) |
<?php
$value = "...data...";
echo trim($value, "."), "\n"; // data
echo ltrim($value, "."), "\n"; // data...
echo rtrim($value, "."), "\n"; // ...dataТипичный сценарий: очистка пользовательского ввода
trim() особенно ценна при валидации данных из формы. Пользователь может случайно добавить пробел после своего email или оставить поле пустым, заполнив его только пробелами. Предварительная обрезка делает такие проверки надёжными:
<?php
$username = " alice ";
$username = trim($username);
if ($username === "") {
echo "Username is required.";
} else {
echo "Welcome, " . $username . "!"; // Welcome, alice!
}Без вызова trim() значение " " (только пробелы) прошло бы проверку if (!empty($username)), хотя фактически поле пустое.
Подводные камни
- Функция возвращает значение и не изменяет исходную переменную. Вызов
trim($string);сам по себе бесполезен — результат необходимо присвоить:$string = trim($string);. - Второй аргумент — набор символов, а не подстрока.
trim("Hello", "Helo")удаляет каждый символ, входящий в строку"Helo", с начала и конца, а не само слово целиком — это может привести к неожиданным результатам. - Многобайтовые символы.
trim()работает с байтами, а не с кодовыми точками Unicode. Для удаления многобайтовых пробельных символов используйте пользовательский набор символов или регулярное выражение. - Обрабатываются только концы строки. Чтобы удалить символы по всей строке, используйте
str_replace()илиpreg_replace().
Заключение
Функция trim() — стандартный инструмент для очистки краёв строки: пробелов по умолчанию или любого указанного набора символов. В сочетании со своими односторонними аналогами ltrim() и rtrim() она делает валидацию входных данных и нормализацию строк простой и предсказуемой.
Чтобы продолжить изучение работы со строками в PHP, ознакомьтесь с PHP Strings, str_replace(), explode() и str_pad().