Cómo hacer un doble trim

Hay un truco muy sencillo de «trim» que queremos compartir. Un trim, en programación, es una función de php que ajusta (redimensiona) un texto. Su uso es bastante sencillo. Sólo tenemos que pasarle como variable el texto que queremos recortar, y qué es lo que queremos que se recorte.

Si tuviéramos este texto y usáramos la función trim con él de esta forma:

$texto = «lo que quiero recortar»;
trim ($texto,»recortar»);

Tendríamos como respuesta «lo que quiero».

Pero si quisiéramos recortar dos palabras (es decir, encadenar dos trim) la cosa no funcionaría. ¿Cómo resolverlo?

Si seguimos el razonamiento anterior, la siguiente cadena debería darnos como resultado «lo quiero»:

trim(trim($texto,»recortar»),»que»);

0-3ldus5r8-codingpero, en cambio, nos vuelve a dar como resultado «lo que quiero».

Ya sabemos, y acabamos de probar, que las asociaciones recursivas de algunas funciones no funcionan en PHP, instándonos a utilizar arrays, así que hay que buscar otra forma de poder eliminar las dos palabras y que siga siendo igual de sencillo.

Una de ellas puede ser la utilización de  la función ereg_replace, que sustituye cualquier cadena dentro de un texto:

$texto = «lo que quiero recortar»;
ereg_replace(«que»,»»,$texto);

Teniendo en cuenta que los parámetros de ereg_replace son («cadena a modificar»,»texto que lo suple»,texto completo), este código nos daría como solución «lo quiero recortar». Ahora sí podríamos hacer la asociación de funciones, de forma que:

trim(ereg_replace(«que»,»»,$texto),»recortar»);
o
trim(ereg_replace(«recortar»,»»,$texto),»que»);

nos darían como solución final «lo quiero», que era lo que estábamos buscando. Simple, rápido y efectivo.

Comentarios

5 respuestas a «Cómo hacer un doble trim»

  1. Avatar de Lord Taran

    ¿No sería mejor utilizar str_replace o str_ireplace? Las funciones de cadena siempre son más rápidas que las de expresiones regulares ¿no?

  2. Avatar de Coquevas

    strtr es un buen amigo, usándolo con un array asociativo puedes definir qué subcadenas se reemplazan por qué cadenas (que puede ser vacía).

    $texto = strtr ( $texto , array ( ‘ recortar’ => », ‘ que’ => » ) );

  3. Avatar de RaveN

    Lord Taran, es una buena idea. Estábamos intentando más ilustrar el problema de las funciones que no se pueden utilizar de forma recursiva que la solución más eficiente al problema. Agradecemos mucho tu aportación.

    Coquevas, la intención era también evitar el uso de arrays para simplificar e entendimiento, pero creo que tu código supera al nuestro en limpieza y en facilidad de entendimiento. Gracias.

    Incluiremos vuestras soluciones y las sucesivas en el artículo.

    Gracias de nuevo 🙂

  4. Avatar de Víctor Pimentel

    RaveN, creo que hay un problema de base con qué creéis que hace trim. Trim simplemente limpia una cadena de caracteres en blanco que aparezcan al principio o al final, por ejemplo:

    trim(» Hola que tal. «) devuelve «Hola que tal.»

    Por defecto quita todos los blancos (tabuladores, espacios, saltos de línea…), pero como parámetro opcional, puedes decirle qué caracteres quieres quitar exactamente. Por ejemplo, si quieres quitar los espacios, los tabuladores y los puntos, sería algo así:

    trim(» Hola que tal. «, » \t.») devuelve «Hola que tal»

    En tu ejemplo, con:

    $texto = «lo que quiero recortar»;
    trim ($texto,»recortar»);

    quieres decir que quite del principio/final las erres, las es, las ces, las os, las tes y las as. Así que:

    trim («lo que quiero recortar»,»recortar») devuelve «lo que quiero »

    Nota el espacio final, porque no le estás diciendo que quite los espacios. Como tampoco le estás diciendo que quite las eles, por eso no quita nada del principio.

    Por eso, el ejemplo:

    trim(trim($texto,»recortar»),»que»)

    Devuelve lo mismo, porque estás quitando las qus, las us y las es, pero no los espacios y las eles. Y es lo que tiene que devolver, comprueba poner un espacio como opción del segundo trim, ya verás cómo te lo quita.

    Os comento esto porque: a) a todos nos pasa alguna vez que nos confundimos lo que hace una función; b) en futuros proyectos que tengáis, es muy útil trim para limpiar entrada del usuario, así que os aconsejo usarlo; c) trim sí que admite encadenarse a otro trim.

    ¡Un saludo!