mirror of
https://github.com/PHPOffice/PhpSpreadsheet.git
synced 2026-09-12 19:16:45 +00:00
Accommodating Slash with preg_quote - Text Functions (#3582)
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.
This commit is contained in:
@@ -261,7 +261,7 @@ class Extract
|
||||
$delimiter = Functions::flattenArray($delimiter);
|
||||
$quotedDelimiters = array_map(
|
||||
function ($delimiter) {
|
||||
return preg_quote($delimiter ?? '');
|
||||
return preg_quote($delimiter ?? '', '/');
|
||||
},
|
||||
$delimiter
|
||||
);
|
||||
@@ -270,7 +270,7 @@ class Extract
|
||||
return '(' . $delimiters . ')';
|
||||
}
|
||||
|
||||
return '(' . preg_quote($delimiter ?? '') . ')';
|
||||
return '(' . preg_quote($delimiter ?? '', '/') . ')';
|
||||
}
|
||||
|
||||
private static function matchFlags(int $matchMode): string
|
||||
|
||||
@@ -294,7 +294,7 @@ class Format
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -193,7 +193,7 @@ class Text
|
||||
if (is_array($delimiter) && count($valueSet) > 1) {
|
||||
$quotedDelimiters = array_map(
|
||||
function ($delimiter) {
|
||||
return preg_quote($delimiter ?? '');
|
||||
return preg_quote($delimiter ?? '', '/');
|
||||
},
|
||||
$valueSet
|
||||
);
|
||||
@@ -202,7 +202,7 @@ class Text
|
||||
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
|
||||
|
||||
@@ -51,6 +51,8 @@ return [
|
||||
],
|
||||
'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', '/', ','],
|
||||
'issue 3574 null string treated as 0' => [0, '', ',', ' '],
|
||||
'issue 3574 one or more spaces treated as 0' => [0, ' ', ',', ' '],
|
||||
'issue 3574 non-blank numeric string okay' => [2, ' 2 ', ',', ' '],
|
||||
|
||||
@@ -248,4 +248,11 @@ return [
|
||||
1,
|
||||
],
|
||||
],
|
||||
'slash delimiter' => [
|
||||
'about/that',
|
||||
[
|
||||
'How/about/that',
|
||||
'/',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
@@ -240,4 +240,11 @@ return [
|
||||
1,
|
||||
],
|
||||
],
|
||||
'slash delimiter' => [
|
||||
'How',
|
||||
[
|
||||
'How/about/that',
|
||||
'/',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
@@ -104,4 +104,20 @@ return [
|
||||
'',
|
||||
],
|
||||
],
|
||||
'slash as column delimiter' => [
|
||||
[['Hello', 'World']],
|
||||
[
|
||||
'Hello/World',
|
||||
'/',
|
||||
'',
|
||||
],
|
||||
],
|
||||
'slash as row delimiter' => [
|
||||
[['ho', 'w'], ['about', '#N/A'], ['t', 'hat']],
|
||||
[
|
||||
'ho.w/about/t.hat',
|
||||
'.',
|
||||
'/',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user