Trimming a word at the start of a string with PHP

Published on 2022-03-05 • Modified on 2022-03-05

This snippet shows how to trim a word (or string) at the start of a string with PHP or Symfony. In the following example, we can't use the str_replace function as the strange:) string would also be replaced. With PHP, we can use the preg_replace function, and with Symfony, we can use the elegant trimPrefix() function of the string component introduced in Symfony 5.4/6.0. Much more readable, right? 🙂


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

use function Symfony\Component\String\u;

/**
 * I am using a PHP trait to isolate each snippet in a file.
 * This code should be called from a Symfony controller extending AbstractController (as of Symfony 4.2)
 * or Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Services are injected in the main controller constructor.
 */
trait Snippet191Trait
{
    public function snippet191(): void
    {
        $string = "strange: It is strange:) isn't it?";
        $prefix = 'strange:';

        // With PHP
        $withPhp = preg_replace('/^'.preg_quote($prefix, '/').'/', '', $string);

        // With Symfony
        $withSymfony = u($string)->trimPrefix($prefix);

        echo 'string: '.$string.PHP_EOL.PHP_EOL;
        echo 'PHP: '.$withPhp.PHP_EOL;
        echo 'Symfony: '.$withSymfony;

        // That's it! 😁
    }
}

 Run this snippet  ≪ this.showUnitTest ? this.trans.hide_unit_test : this.trans.show_unit_test ≫  More on Stackoverflow   Read the doc  More on the web

  Work with me!

<?php

declare(strict_types=1);

namespace App\Tests\Integration\Controller\Snippets;

use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;

use function Symfony\Component\String\u;

/**
 * @see Snippet191Trait
 */
final class Snippet191Test extends KernelTestCase
{
    /**
     * @see Snippet191Trait::snippet191
     */
    public function testSnippet191(): void
    {
        $string = "strange: It is strange:) isn't it?";
        $prefix = 'strange:';

        $withPhp = preg_replace('/^'.preg_quote($prefix, '/').'/', '', $string);
        $withSymfony = u($string)->trimPrefix($prefix);

        self::assertSame(" It is strange:) isn't it?", $withPhp);
        self::assertSame($withPhp, $withSymfony->toString());
    }
}