Menu

PHP trim(): eliminar espacios de un string

trim($string) elimina espacios, tabuladores y saltos de línea de los dos extremos de una cadena; ltrim() y rtrim() limpian un solo lado. Aprende a recortar caracteres concretos, el espacio japonés de ancho completo y cada valor de un array.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

trim($string) devuelve la cadena sin los espacios en blanco del principio y del final: espacios, tabuladores, saltos de línea, retornos de carro, bytes NUL y tabuladores verticales. ltrim() los elimina solo del principio y rtrim() solo del final. Los espacios del centro se conservan.

La salida de var_dump() muestra la longitud de cada resultado, lo que hace visibles los caracteres eliminados. Recortar es lo primero que hay que hacer con la mayoría de los valores de un formulario (las contraseñas son la excepción, ver el final de la página): un usuario que escribe ada@example.com con un espacio al final debería poder iniciar sesión igualmente.

Sintaxis

trim(string $string, string $characters = " \n\r\t\v\0"): string
ltrim(string $string, string $characters = " \n\r\t\v\0"): string
rtrim(string $string, string $characters = " \n\r\t\v\0"): string

trim() devuelve una cadena nueva; no cambia la variable que le pasas.

Recortar caracteres concretos

El segundo argumento sustituye la lista por defecto. Cada carácter de la lista se elimina de los extremos, en cualquier orden y cualquier número de veces. .. define un rango, así que 'a..z' significa todas las letras minúsculas.

Para seguir eliminando también los espacios en blanco normales, inclúyelos en la lista: trim($s, " \n\r\t\v\0/").

El segundo argumento es un conjunto de caracteres, no una cadena

trim() no elimina una palabra ni un sufijo. Elimina cualquiera de los caracteres que indicas, de los dos extremos, hasta llegar a uno que no está en la lista. Eso sorprende a quien intenta quitar la extensión de un archivo:

La primera línea elimina también la h del principio, porque h está en el conjunto. Para eliminar un prefijo o un sufijo fijo, usa str_starts_with() o str_ends_with() con substr(), o str_replace() si el texto no puede aparecer en ningún otro sitio.

Recortar el espacio de ancho completo (entrada en japonés)

Los teclados japoneses suelen producir el espacio ideográfico   (U+3000), por ejemplo alrededor de un nombre escrito en un formulario. No está en la lista por defecto de trim, y ponerlo en el segundo argumento es una trampa: trim() trabaja byte a byte, el espacio son los 3 bytes E3 80 80, y E3 es también el primer byte de todos los caracteres hiragana y katakana, así que un nombre que empiece por uno de ellos pierde el primer byte de ese carácter. Usa una expresión regular con el modificador u:

\A y \z anclan al principio y al final de la cadena. Con el modificador u, \s coincide con cualquier espacio Unicode: los espacios en blanco ASCII, el espacio de ancho completo y el espacio de no separación (U+00A0) que suele llegar al copiar y pegar desde páginas web. Sin u, \s solo coincide con espacios ASCII y el espacio de ancho completo se queda. PHP 8.4 añade mb_trim(), mb_ltrim() y mb_rtrim() para esto; en PHP 8.3 y anteriores, la expresión regular es el camino.

Recortar cada valor de un array

array_map('trim', $array) recorta cada valor y conserva las claves. Un caso típico es una lista separada por comas de un campo de texto, dividida con explode():

Recortar un valor de formulario antes de validarlo

Recorta primero y luego comprueba si es una cadena vacía. Así, un campo que solo contiene espacios se rechaza como vacío. Ejecuta este bloque, escribe un nombre con espacios alrededor en el formulario y pulsa Send: el mismo script se ejecuta otra vez con $_POST lleno.

No recortes las contraseñas: un espacio al final de una contraseña forma parte de ella.

Preguntas frecuentes

¿Qué elimina trim() en PHP?

Por defecto, de los dos extremos de la cadena: espacios, tabuladores (\t), saltos de línea (\n), retornos de carro (\r), bytes NUL (\0) y tabuladores verticales (\v). Nunca toca el centro de la cadena.

¿Cuál es la diferencia entre trim, ltrim y rtrim?

trim() limpia los dos extremos, ltrim() solo el principio y rtrim() solo el final. Las tres aceptan la misma lista opcional de caracteres que eliminar.

¿Por qué trim() no elimina el espacio japonés de ancho completo?

El espacio de ancho completo (U+3000) no está en la lista por defecto de trim y ocupa 3 bytes en UTF-8. Usa preg_replace('/\A\s+|\s+\z/u', '', $s): con el modificador u, \s coincide con cualquier espacio Unicode, incluido U+3000. PHP 8.4 añade mb_trim(), que también lo elimina.

¿Cómo elimino la última coma de una cadena en PHP?

rtrim($s, ',') elimina todas las comas finales. Si puede seguirle un espacio, incluye también el espacio: rtrim($s, ', ').

¿Cómo aplico trim a cada valor de un array?

array_map('trim', $array) devuelve un array nuevo con cada valor recortado, conservando las claves. Para arrays anidados, usa array_walk_recursive() con una referencia.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR