Trim: примеры (PHP)
trim(string string [, string characters]): stringФункция trim в PHP
Функция trim используется для удаления пробельных или других заданных символов с обеих сторон строки. Она часто применяется при обработке пользовательского ввода, чтении данных из файлов или баз данных для очистки строк от нежелательных символов по краям.
Синтаксис функции: trim(string $string, string $characters = " \t\n\r\x0B\x00").
- $string (обязательный): исходная строка, которую требуется обработать.
- $characters (опциональный): строка, содержащая символы для удаления. Если аргумент не указан, trim удаляет следующие символы по умолчанию:
- обычный пробел (
) - символ табуляции (
\t) - символ новой строки (
\n) - символ возврата каретки (
\r) - вертикальная табуляция (
\x0B) - нулевой байт (
\x00)
- обычный пробел (
Функция возвращает модифицированную строку.
Базовые примеры
Удаление пробелов по умолчанию с обоих концов строки.
$str = " Пример строки \n";
echo trim($str);Пример строки
Удаление только определённых символов, например, звёздочек и точек.
$str = "***Пример строки...***";
echo trim($str, '*.');Пример строки
Использование двух точек для указания диапазона ASCII-символов.
$str = "123Пример строки321";
echo trim($str, '1..3');Пример строки
Похожие функции в PHP
Функции ltrim и rtrim аналогичны trim, но удаляют символы только с начала (слева) или только с конца (справа) строки соответственно. Их применяют, когда нужна односторонняя очистка.
Функция preg_replace с регулярными выражениями позволяет выполнять более сложные и избирательные операции по удалению или замене символов в любой части строки. Использование оправдано, когда правила очистки выходят за рамки простого удаления с краёв.
Функция filter_var с фильтром FILTER_SANITIZE_STRING (устарел в PHP 8.1) или FILTER_SANITIZE_SPECIAL_CHARS предназначена для санации строк, но не выполняет прямую аналогию trim. Основное назначение — очистка от нежелательных тегов и спецсимволов.
Типичные ошибки
До PHP 8 это вызывало предупреждение и возвращало null. В PHP 8 будет выброшена TypeError.
// PHP 7.x
$result = trim(['test']);
var_dump($result);Warning: trim() expects parameter 1 to be string, array given NULL
Функция удаляет символы только с концов строки.
$str = "Пример\n\n строки";
echo trim($str);Пример строки
При передаче нестроковых типов данных, они преобразуются в строку, что иногда приводит к неожиданным результатам.
echo trim(true); // Выведет '1'
echo trim(null); // Выведет пустую строку ''1
Изменения в новых версиях PHP
Была изменена обработка нестроковых аргументов. Если в trim передаётся значение, отличное от строки, выбрасывается исключение TypeError. Ранее выдавалось предупреждение и возвращалось null.
Значительных изменений в поведении функции не было. Однако продолжается общий процесс ужесточения типизации языка.
Расширенные примеры
Функция полезна при обработке строк, прочитанных из CSV, где могут быть лишние пробелы.
$csvLine = " Значение1, Значение2 ,Значение3 \r\n";
$cleanValues = array_map('trim', explode(',', $csvLine));
print_r($cleanValues);Array
(
[0] => Значение1
[1] => Значение2
[2] => Значение3
)Можно удалять символы, характерные для текста, скопированного из богатых текстовых редакторов.
$text = "\x00\x0B\t\n\rВажный текст\t\n\r\x0B\x00";
echo '[' . trim($text) . ']';[Важный текст]
Для простого удаления пробелов trim значительно быстрее, чем использование регулярных выражений.
$str = " текст ";
$trimmed = trim($str);
$preged = preg_replace('/^\s+|\s+$/', '', $str);
var_dump($trimmed === $preged); // Обе операции дают одинаковый результатbool(true)
Важное ограничение: стандартная функция trim не удаляет юникодные пробелы (например, неразрывный пробел U+00A0). Для этого потребуется preg_replace или mb_trim.
$str = "\xC2\xA0юникодный пробел\xC2\xA0"; // Неразрывный пробел в UTF-8
echo 'Длина после trim: ' . strlen(trim($str));
// Решение с регулярным выражением
$cleaned = preg_replace('/^[\s\p{Z}]+|[\s\p{Z}]+$/u', '', $str);
echo '\nДлина после preg_replace: ' . strlen($cleaned);Длина после trim: 30 Длина после preg_replace: 28
Аналоги в других языках
Метод строк str.strip() аналогичен trim. Также существуют str.lstrip() и str.rstrip().
s = " текст "
print(s.strip()) # 'текст'текст
Метод String.prototype.trim(). ES2019 добавил trimStart() и trimEnd().
let str = " текст ";
console.log(str.trim()); // 'текст'текст
Функции TRIM(), LTRIM(), RTRIM(). TRIM позволяет явно указывать сторону удаления.
SELECT TRIM(LEADING '.' FROM '...текст...') AS result;текст...
Метод String.trim() удаляет пробельные символы (с кодовыми точками <= U+0020). С Java 11 используется String.strip(), который учитывает Unicode.