Supprimer un mot au début d'une chaîne de caractères avec PHP

Publié le 05/03/2022 • Mis à jour le 05/03/2022


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous voyons comment supprimer un mot au début d'une chaîne de caractères avec PHP. Dans l'exemple suivant, on ne peut pas utiliser la fonction str_replace car la chaîne strange:) serait aussi supprimée. Avec PHP on peut utiliser la fonction preg_replace, et avec Symfony, on peut utiliser l'élégante fonction trimPrefix() introduite avec Symfony 5.4 / 6.0. C'est bien plus lisible, n'est-ce pas ? 🙂


<?php

declare(strict_types=1);

// src/Controller/Snippet/Snippet191Trait.php

namespace App\Controller\Snippet;

use function Symfony\Component\String\u;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
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! 😁
    }
}

 Exécuter le snippet  ≪ this.showUnitTest ? this.trans.hide_unit_test : this.trans.show_unit_test ≫  Plus sur Stackoverflow   Lire la doc  Plus sur le web

<?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());
    }
}