Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Accommodating Slash with preg_quote - Text Functions #3582

Merged
merged 3 commits into from
May 27, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
Accomodating Slash with preg_quote - Text Functions
PR #3513, developed by @SaidkhojaIftikhor, has been stuck for some time awaiting tests. This is the first of three PRs to replace that one. This accomodates the use of slash as a delimiter in functions TEXTAFTER, TEXTBEFORE, TEXTSPLIT, and NUMBERVALUE. The source changes are very simple. Additional tests exercise all the source changes.
  • Loading branch information
oleibman committed May 24, 2023
commit f0f8e1107d146c84e4dac59d3b51583bfe4f5ae8
4 changes: 2 additions & 2 deletions src/PhpSpreadsheet/Calculation/TextData/Extract.php
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ private static function buildDelimiter($delimiter): string
$delimiter = Functions::flattenArray($delimiter);
$quotedDelimiters = array_map(
function ($delimiter) {
return preg_quote($delimiter ?? '');
return preg_quote($delimiter ?? '', '/');
},
$delimiter
);
Expand All @@ -270,7 +270,7 @@ function ($delimiter) {
return '(' . $delimiters . ')';
}

return '(' . preg_quote($delimiter ?? '') . ')';
return '(' . preg_quote($delimiter ?? '', '/') . ')';
}

private static function matchFlags(int $matchMode): string
Expand Down
2 changes: 1 addition & 1 deletion src/PhpSpreadsheet/Calculation/TextData/Format.php
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ public static function NUMBERVALUE($value = '', $decimalSeparator = null, $group
}

if (!is_numeric($value)) {
$decimalPositions = preg_match_all('/' . preg_quote($decimalSeparator) . '/', $value, $matches, PREG_OFFSET_CAPTURE);
$decimalPositions = preg_match_all('/' . preg_quote($decimalSeparator, '/') . '/', $value, $matches, PREG_OFFSET_CAPTURE);
if ($decimalPositions > 1) {
return ExcelError::VALUE();
}
Expand Down
4 changes: 2 additions & 2 deletions src/PhpSpreadsheet/Calculation/TextData/Text.php
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ private static function buildDelimiter($delimiter): string
if (is_array($delimiter) && count($valueSet) > 1) {
$quotedDelimiters = array_map(
function ($delimiter) {
return preg_quote($delimiter ?? '');
return preg_quote($delimiter ?? '', '/');
},
$valueSet
);
Expand All @@ -202,7 +202,7 @@ function ($delimiter) {
return '(' . $delimiters . ')';
}

return '(' . preg_quote(/** @scrutinizer ignore-type */ Functions::flattenSingleValue($delimiter)) . ')';
return '(' . preg_quote(/** @scrutinizer ignore-type */ Functions::flattenSingleValue($delimiter), '/') . ')';
}

private static function matchFlags(bool $matchMode): string
Expand Down
2 changes: 2 additions & 0 deletions tests/data/Calculation/TextData/NUMBERVALUE.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,6 @@
],
'no arguments' => ['exception'],
'boolean argument' => ['#VALUE!', true],
'slash as group separator' => [1234567.1, '1/234/567.1', '.', '/'],
'slash as decimal separator' => [1234567.1, '1,234,567/1', '/', ','],
];
7 changes: 7 additions & 0 deletions tests/data/Calculation/TextData/TEXTAFTER.php
Original file line number Diff line number Diff line change
Expand Up @@ -248,4 +248,11 @@
1,
],
],
'slash delimiter' => [
'about/that',
[
'How/about/that',
'/',
],
],
];
7 changes: 7 additions & 0 deletions tests/data/Calculation/TextData/TEXTBEFORE.php
Original file line number Diff line number Diff line change
Expand Up @@ -240,4 +240,11 @@
1,
],
],
'slash delimiter' => [
'How',
[
'How/about/that',
'/',
],
],
];
16 changes: 16 additions & 0 deletions tests/data/Calculation/TextData/TEXTSPLIT.php
Original file line number Diff line number Diff line change
Expand Up @@ -104,4 +104,20 @@
'',
],
],
'slash as column delimiter' => [
[['Hello', 'World']],
[
'Hello/World',
'/',
'',
],
],
'slash as row delimiter' => [
[['ho', 'w'], ['about', '#N/A'], ['t', 'hat']],
[
'ho.w/about/t.hat',
'.',
'/',
],
],
];