From 12a4b4f83e2d84177bdf65e85be023ed2d20634b Mon Sep 17 00:00:00 2001 From: donyatorabi Date: Sat, 29 Jun 2024 17:15:48 +0330 Subject: [PATCH] return null in before, after, beforeLast and afterLast when search item is not in the subject --- src/Illuminate/Support/Str.php | 15 +++++++++++---- tests/Support/SupportStrTest.php | 8 ++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/Illuminate/Support/Str.php b/src/Illuminate/Support/Str.php index 5dcbd182e3c4..1b8522e5ddbb 100644 --- a/src/Illuminate/Support/Str.php +++ b/src/Illuminate/Support/Str.php @@ -85,7 +85,14 @@ public static function of($string) */ public static function after($subject, $search) { - return $search === '' ? $subject : array_reverse(explode($search, $subject, 2))[0]; + if ($search === '') { + return $subject; + } + + $explodedSubject = explode($search, $subject, 2); + + // if it was exploded in less than one part so search string was not found in it + return count($explodedSubject) > 1 ? array_reverse($explodedSubject)[0] : ''; } /** @@ -104,7 +111,7 @@ public static function afterLast($subject, $search) $position = strrpos($subject, (string) $search); if ($position === false) { - return $subject; + return ''; } return substr($subject, $position + strlen($search)); @@ -150,7 +157,7 @@ public static function before($subject, $search) $result = strstr($subject, (string) $search, true); - return $result === false ? $subject : $result; + return $result === false ? '' : $result; } /** @@ -169,7 +176,7 @@ public static function beforeLast($subject, $search) $pos = mb_strrpos($subject, $search); if ($pos === false) { - return $subject; + return ''; } return static::substr($subject, 0, $pos); diff --git a/tests/Support/SupportStrTest.php b/tests/Support/SupportStrTest.php index 725326e7e8aa..802317b4ee9c 100755 --- a/tests/Support/SupportStrTest.php +++ b/tests/Support/SupportStrTest.php @@ -276,7 +276,7 @@ public function testStrBefore(): void $this->assertSame('han', Str::before('hannah', 'nah')); $this->assertSame('ha', Str::before('hannah', 'n')); $this->assertSame('ééé ', Str::before('ééé hannah', 'han')); - $this->assertSame('hannah', Str::before('hannah', 'xxxx')); + $this->assertSame('', Str::before('hannah', 'xxxx')); $this->assertSame('hannah', Str::before('hannah', '')); $this->assertSame('han', Str::before('han0nah', '0')); $this->assertSame('han', Str::before('han0nah', 0)); @@ -295,7 +295,7 @@ public function testStrBeforeLast(): void $this->assertSame('yvet', Str::beforeLast('yvette', 't')); $this->assertSame('ééé ', Str::beforeLast('ééé yvette', 'yve')); $this->assertSame('', Str::beforeLast('yvette', 'yve')); - $this->assertSame('yvette', Str::beforeLast('yvette', 'xxxx')); + $this->assertSame('', Str::beforeLast('yvette', 'xxxx')); $this->assertSame('yvette', Str::beforeLast('yvette', '')); $this->assertSame('yv0et', Str::beforeLast('yv0et0te', '0')); $this->assertSame('yv0et', Str::beforeLast('yv0et0te', 0)); @@ -344,7 +344,7 @@ public function testStrAfter() $this->assertSame('nah', Str::after('hannah', 'han')); $this->assertSame('nah', Str::after('hannah', 'n')); $this->assertSame('nah', Str::after('ééé hannah', 'han')); - $this->assertSame('hannah', Str::after('hannah', 'xxxx')); + $this->assertSame('', Str::after('hannah', 'xxxx')); $this->assertSame('hannah', Str::after('hannah', '')); $this->assertSame('nah', Str::after('han0nah', '0')); $this->assertSame('nah', Str::after('han0nah', 0)); @@ -357,7 +357,7 @@ public function testStrAfterLast() $this->assertSame('e', Str::afterLast('yvette', 't')); $this->assertSame('e', Str::afterLast('ééé yvette', 't')); $this->assertSame('', Str::afterLast('yvette', 'tte')); - $this->assertSame('yvette', Str::afterLast('yvette', 'xxxx')); + $this->assertSame('', Str::afterLast('yvette', 'xxxx')); $this->assertSame('yvette', Str::afterLast('yvette', '')); $this->assertSame('te', Str::afterLast('yv0et0te', '0')); $this->assertSame('te', Str::afterLast('yv0et0te', 0));