Skip to content

Commit 5467fc8

Browse files
authored
Fixed bug Str::trim cannot support the default rules "\n\r\t\v" for trim/ltrim/rtim. (#7068)
1 parent b01dcfc commit 5467fc8

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

src/Str.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1251,7 +1251,9 @@ public static function reverse($value): string
12511251
public static function trim($value, $charlist = null)
12521252
{
12531253
if ($charlist === null) {
1254-
return preg_replace('~^[\s\x{FEFF}\x{200B}\x{200E}]+|[\s\x{FEFF}\x{200B}\x{200E}]+$~u', '', $value) ?? trim($value);
1254+
$trimDefaultCharacters = " \n\r\t\v";
1255+
1256+
return preg_replace('~^[\s\x{FEFF}\x{200B}\x{200E}' . $trimDefaultCharacters . ']+|[\s\x{FEFF}\x{200B}\x{200E}' . $trimDefaultCharacters . ']+$~u', '', $value) ?? trim($value);
12551257
}
12561258

12571259
return trim($value, $charlist);
@@ -1267,7 +1269,9 @@ public static function trim($value, $charlist = null)
12671269
public static function ltrim($value, $charlist = null)
12681270
{
12691271
if ($charlist === null) {
1270-
return preg_replace('~^[\s\x{FEFF}\x{200B}\x{200E}]+~u', '', $value) ?? ltrim($value);
1272+
$ltrimDefaultCharacters = " \n\r\t\v";
1273+
1274+
return preg_replace('~^[\s\x{FEFF}\x{200B}\x{200E}' . $ltrimDefaultCharacters . ']+~u', '', $value) ?? ltrim($value);
12711275
}
12721276

12731277
return ltrim($value, $charlist);
@@ -1283,7 +1287,9 @@ public static function ltrim($value, $charlist = null)
12831287
public static function rtrim($value, $charlist = null)
12841288
{
12851289
if ($charlist === null) {
1286-
return preg_replace('~[\s\x{FEFF}\x{200B}\x{200E}]+$~u', '', $value) ?? rtrim($value);
1290+
$rtrimDefaultCharacters = " \n\r\t\v";
1291+
1292+
return preg_replace('~[\s\x{FEFF}\x{200B}\x{200E}' . $rtrimDefaultCharacters . ']+$~u', '', $value) ?? rtrim($value);
12871293
}
12881294

12891295
return rtrim($value, $charlist);

tests/StrTest.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,15 @@ public function testTrim()
979979
);
980980

981981
$this->assertSame("\xE9", Str::trim(" \xE9 "));
982+
983+
$trimDefaultChars = [' ', "\n", "\r", "\t", "\v"];
984+
985+
foreach ($trimDefaultChars as $char) {
986+
$this->assertSame('', Str::trim(" {$char} "));
987+
$this->assertSame(trim(" {$char} "), Str::trim(" {$char} "));
988+
$this->assertSame('foo bar', Str::trim("{$char} foo bar {$char}"));
989+
$this->assertSame(trim("{$char} foo bar {$char}"), Str::trim("{$char} foo bar {$char}"));
990+
}
982991
}
983992

984993
public function testLtrim()
@@ -999,6 +1008,15 @@ public function testLtrim()
9991008
')
10001009
);
10011010
$this->assertSame("\xE9 ", Str::ltrim(" \xE9 "));
1011+
1012+
$ltrimDefaultChars = [' ', "\n", "\r", "\t", "\v"];
1013+
1014+
foreach ($ltrimDefaultChars as $char) {
1015+
$this->assertSame('', Str::ltrim(" {$char} "));
1016+
$this->assertSame(ltrim(" {$char} "), Str::ltrim(" {$char} "));
1017+
$this->assertSame("foo bar {$char}", Str::ltrim("{$char} foo bar {$char}"));
1018+
$this->assertSame(ltrim("{$char} foo bar {$char}"), Str::ltrim("{$char} foo bar {$char}"));
1019+
}
10021020
}
10031021

10041022
public function testRtrim()
@@ -1020,6 +1038,15 @@ public function testRtrim()
10201038
);
10211039

10221040
$this->assertSame(" \xE9", Str::rtrim(" \xE9 "));
1041+
1042+
$rtrimDefaultChars = [' ', "\n", "\r", "\t", "\v"];
1043+
1044+
foreach ($rtrimDefaultChars as $char) {
1045+
$this->assertSame('', Str::rtrim(" {$char} "));
1046+
$this->assertSame(rtrim(" {$char} "), Str::rtrim(" {$char} "));
1047+
$this->assertSame("{$char} foo bar", Str::rtrim("{$char} foo bar {$char}"));
1048+
$this->assertSame(rtrim("{$char} foo bar {$char}"), Str::rtrim("{$char} foo bar {$char}"));
1049+
}
10231050
}
10241051

10251052
public function testSquish()

0 commit comments

Comments
 (0)