From 37b6ca49798f18a02dd8aa6142adc87378164621 Mon Sep 17 00:00:00 2001
From: oleibman <10341515+oleibman@users.noreply.github.com>
Date: Sat, 8 Feb 2025 00:11:01 -0800
Subject: [PATCH] Allow php-cs-fixer to Handle Implicit Backslashes
Its defaults are to unescape within single quotes, and escape within double quotes and here-docs. Right now, it leaves everything as-is, which means our code is inconsistent and need not be. Further, although dealing with complex regular expressions will never be easy, I find it much easier to figure out what's going on when superfluous back-slashes are removed.
These changes were all made automatically using the "fix" script, so should be reliable. They, of course, pass all unit tests.
---
.php-cs-fixer.dist.php | 2 +-
composer.json | 1 +
.../Calculation/Calculation.php | 2 +-
.../Calculation/DateTimeExcel/DateValue.php | 2 +-
.../Calculation/DateTimeExcel/TimeValue.php | 2 +-
.../Engine/Operands/StructuredReference.php | 2 +-
.../Calculation/FormulaParser.php | 2 +-
src/PhpSpreadsheet/Calculation/Functions.php | 2 +-
.../Calculation/Internal/WildcardMatch.php | 8 ++--
.../Calculation/TextData/Trim.php | 2 +-
.../Cell/DefaultValueBinder.php | 2 +-
src/PhpSpreadsheet/Document/Properties.php | 4 +-
src/PhpSpreadsheet/Reader/Html.php | 4 +-
.../Reader/Ods/FormulaTranslator.php | 4 +-
.../Reader/Security/XmlScanner.php | 8 ++--
src/PhpSpreadsheet/Reader/Slk.php | 4 +-
.../Reader/Xlsx/DataValidations.php | 2 +-
.../Reader/Xml/DataValidations.php | 4 +-
src/PhpSpreadsheet/Shared/Date.php | 2 +-
src/PhpSpreadsheet/Shared/Font.php | 2 +-
.../Style/NumberFormat/DateFormatter.php | 2 +-
.../Style/NumberFormat/Formatter.php | 10 ++---
.../Style/NumberFormat/FractionFormatter.php | 2 +-
.../Style/NumberFormat/NumberFormatter.php | 8 ++--
.../NumberFormat/Wizard/CurrencyBase.php | 2 +-
.../NumberFormat/Wizard/CurrencyNegative.php | 4 +-
src/PhpSpreadsheet/Worksheet/AutoFilter.php | 2 +-
src/PhpSpreadsheet/Worksheet/Drawing.php | 2 +-
src/PhpSpreadsheet/Worksheet/Table.php | 6 +--
src/PhpSpreadsheet/Worksheet/Validations.php | 2 +-
src/PhpSpreadsheet/Worksheet/Worksheet.php | 4 +-
src/PhpSpreadsheet/Writer/Html.php | 10 ++---
src/PhpSpreadsheet/Writer/Xls/Parser.php | 42 +++++++++----------
src/PhpSpreadsheet/Writer/Xls/Worksheet.php | 10 ++---
.../Functions/Engineering/ImCscTest.php | 4 +-
tests/PhpSpreadsheetTests/IOFactoryTest.php | 6 +--
.../Reader/Gnumeric/GnumericLoadTest.php | 4 +-
.../Reader/Security/XmlScannerTest.php | 2 +-
.../Reader/Xlsx/Issue3730Test.php | 2 +-
.../Reader/Xml/XmlLoadTest.php | 6 +--
.../Writer/Csv/CsvEnclosureTest.php | 10 ++---
.../Writer/Dompdf/HideMergeTest.php | 4 +-
.../Writer/Html/HideMergeTest.php | 4 +-
.../Writer/Html/InvalidFileNameTest.php | 2 +-
.../Writer/Html/VisibilityTest.php | 22 +++++-----
.../Writer/Html/XssVulnerabilityTest.php | 2 +-
.../Writer/Mpdf/HideMergeTest.php | 4 +-
.../Writer/Tcpdf/HideMergeTest.php | 4 +-
.../Writer/Xlsx/Issue4179Test.php | 2 +-
tests/data/Calculation/TextData/TEXTJOIN.php | 2 +-
tests/data/Style/NumberFormat.php | 2 +-
tests/data/Style/NumberFormatDates.php | 4 +-
52 files changed, 127 insertions(+), 126 deletions(-)
diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php
index 6348cc0051..d4acca5045 100644
--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -221,7 +221,7 @@
'standardize_not_equals' => true,
'static_lambda' => false, // Risky if we can't guarantee nobody use `bindTo()`
'strict_comparison' => false, // No, too dangerous to change that
- 'string_implicit_backslashes' => false, // was escape_implicit_backslashes, too confusing
+ 'string_implicit_backslashes' => ['single_quoted' => 'unescape', 'double_quoted' => 'escape', 'heredoc' => 'escape'], // was escape_implicit_backslashes
'strict_param' => false, // No, too dangerous to change that
'string_length_to_empty' => true,
'string_line_ending' => true,
diff --git a/composer.json b/composer.json
index 2dc2c336d4..1635f4f52c 100644
--- a/composer.json
+++ b/composer.json
@@ -15,6 +15,7 @@
"platform": {
"php" : "8.1.99"
},
+ "process-timeout": 600,
"sort-packages": true,
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true
diff --git a/src/PhpSpreadsheet/Calculation/Calculation.php b/src/PhpSpreadsheet/Calculation/Calculation.php
index effc63a48c..45807e5772 100644
--- a/src/PhpSpreadsheet/Calculation/Calculation.php
+++ b/src/PhpSpreadsheet/Calculation/Calculation.php
@@ -52,7 +52,7 @@ class Calculation
// Defined Names: Named Range of cells, or Named Formulae
const CALCULATION_REGEXP_DEFINEDNAME = '((([^\s,!&%^\/\*\+<>=-]*)|(\'(?:[^\']|\'[^!])+?\')|(\"(?:[^\"]|\"[^!])+?\"))!)?([_\p{L}][_\p{L}\p{N}\.]*)';
// Structured Reference (Fully Qualified and Unqualified)
- const CALCULATION_REGEXP_STRUCTURED_REFERENCE = '([\p{L}_\\\\][\p{L}\p{N}\._]+)?(\[(?:[^\d\]+-])?)';
+ const CALCULATION_REGEXP_STRUCTURED_REFERENCE = '([\p{L}_\\\][\p{L}\p{N}\._]+)?(\[(?:[^\d\]+-])?)';
// Error
const CALCULATION_REGEXP_ERROR = '\#[A-Z][A-Z0_\/]*[!\?]?';
diff --git a/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateValue.php b/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateValue.php
index 8c5fa71c94..b6411df58d 100644
--- a/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateValue.php
+++ b/src/PhpSpreadsheet/Calculation/DateTimeExcel/DateValue.php
@@ -47,7 +47,7 @@ public static function fromString(null|array|string|int|bool|float $dateValue):
}
// try to parse as date iff there is at least one digit
- if (is_string($dateValue) && preg_match('/\\d/', $dateValue) !== 1) {
+ if (is_string($dateValue) && preg_match('/\d/', $dateValue) !== 1) {
return ExcelError::VALUE();
}
diff --git a/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeValue.php b/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeValue.php
index d8c53b476f..54e5a4e76f 100644
--- a/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeValue.php
+++ b/src/PhpSpreadsheet/Calculation/DateTimeExcel/TimeValue.php
@@ -43,7 +43,7 @@ public static function fromString(null|array|string|int|bool|float $timeValue):
}
// try to parse as time iff there is at least one digit
- if (is_string($timeValue) && preg_match('/\\d/', $timeValue) !== 1) {
+ if (is_string($timeValue) && preg_match('/\d/', $timeValue) !== 1) {
return ExcelError::VALUE();
}
diff --git a/src/PhpSpreadsheet/Calculation/Engine/Operands/StructuredReference.php b/src/PhpSpreadsheet/Calculation/Engine/Operands/StructuredReference.php
index fc2b5ea47d..15c8762030 100644
--- a/src/PhpSpreadsheet/Calculation/Engine/Operands/StructuredReference.php
+++ b/src/PhpSpreadsheet/Calculation/Engine/Operands/StructuredReference.php
@@ -29,7 +29,7 @@ final class StructuredReference implements Operand, Stringable
self::ITEM_SPECIFIER_TOTALS,
];
- private const TABLE_REFERENCE = '/([\p{L}_\\\\][\p{L}\p{N}\._]+)?(\[(?:[^\]\[]+|(?R))*+\])/miu';
+ private const TABLE_REFERENCE = '/([\p{L}_\\\][\p{L}\p{N}\._]+)?(\[(?:[^\]\[]+|(?R))*+\])/miu';
private string $value;
diff --git a/src/PhpSpreadsheet/Calculation/FormulaParser.php b/src/PhpSpreadsheet/Calculation/FormulaParser.php
index 9868b82840..f07b5b5db2 100644
--- a/src/PhpSpreadsheet/Calculation/FormulaParser.php
+++ b/src/PhpSpreadsheet/Calculation/FormulaParser.php
@@ -213,7 +213,7 @@ private function parseToTokens(): void
// scientific notation check
if (str_contains(self::OPERATORS_SN, $this->formula[$index])) {
if (strlen($value) > 1) {
- if (preg_match('/^[1-9]{1}(\\.\\d+)?E{1}$/', $this->formula[$index]) != 0) {
+ if (preg_match('/^[1-9]{1}(\.\d+)?E{1}$/', $this->formula[$index]) != 0) {
$value .= $this->formula[$index];
++$index;
diff --git a/src/PhpSpreadsheet/Calculation/Functions.php b/src/PhpSpreadsheet/Calculation/Functions.php
index 5ee2dfd7a4..3e6242286e 100644
--- a/src/PhpSpreadsheet/Calculation/Functions.php
+++ b/src/PhpSpreadsheet/Calculation/Functions.php
@@ -338,7 +338,7 @@ public static function expandDefinedName(string $coordinate, Cell $cell): string
public static function trimTrailingRange(string $coordinate): string
{
- return (string) preg_replace('/:[\\w\$]+$/', '', $coordinate);
+ return (string) preg_replace('/:[\w\$]+$/', '', $coordinate);
}
public static function trimSheetFromCellReference(string $coordinate): string
diff --git a/src/PhpSpreadsheet/Calculation/Internal/WildcardMatch.php b/src/PhpSpreadsheet/Calculation/Internal/WildcardMatch.php
index 371ad8b3d1..8282ea289c 100644
--- a/src/PhpSpreadsheet/Calculation/Internal/WildcardMatch.php
+++ b/src/PhpSpreadsheet/Calculation/Internal/WildcardMatch.php
@@ -6,10 +6,10 @@ class WildcardMatch
{
private const SEARCH_SET = [
'~~', // convert double tilde to unprintable value
- '~\\*', // convert tilde backslash asterisk to [*] (matches literal asterisk in regexp)
- '\\*', // convert backslash asterisk to .* (matches string of any length in regexp)
- '~\\?', // convert tilde backslash question to [?] (matches literal question mark in regexp)
- '\\?', // convert backslash question to . (matches one character in regexp)
+ '~\*', // convert tilde backslash asterisk to [*] (matches literal asterisk in regexp)
+ '\*', // convert backslash asterisk to .* (matches string of any length in regexp)
+ '~\?', // convert tilde backslash question to [?] (matches literal question mark in regexp)
+ '\?', // convert backslash question to . (matches one character in regexp)
"\x1c", // convert original double tilde to single tilde
];
diff --git a/src/PhpSpreadsheet/Calculation/TextData/Trim.php b/src/PhpSpreadsheet/Calculation/TextData/Trim.php
index d8f170621f..d83e14dd46 100644
--- a/src/PhpSpreadsheet/Calculation/TextData/Trim.php
+++ b/src/PhpSpreadsheet/Calculation/TextData/Trim.php
@@ -25,7 +25,7 @@ public static function nonPrintable(mixed $stringValue = '')
$stringValue = Helpers::extractString($stringValue);
- return (string) preg_replace('/[\\x00-\\x1f]/', '', "$stringValue");
+ return (string) preg_replace('/[\x00-\x1f]/', '', "$stringValue");
}
/**
diff --git a/src/PhpSpreadsheet/Cell/DefaultValueBinder.php b/src/PhpSpreadsheet/Cell/DefaultValueBinder.php
index f36934ed3f..10c5c93c59 100644
--- a/src/PhpSpreadsheet/Cell/DefaultValueBinder.php
+++ b/src/PhpSpreadsheet/Cell/DefaultValueBinder.php
@@ -89,7 +89,7 @@ public static function dataTypeForValue(mixed $value): string
return DataType::TYPE_FORMULA;
}
- if (preg_match('/^[\+\-]?(\d+\\.?\d*|\d*\\.?\d+)([Ee][\-\+]?[0-2]?\d{1,3})?$/', $value)) {
+ if (preg_match('/^[\+\-]?(\d+\.?\d*|\d*\.?\d+)([Ee][\-\+]?[0-2]?\d{1,3})?$/', $value)) {
$tValue = ltrim($value, '+-');
if (strlen($tValue) > 1 && $tValue[0] === '0' && $tValue[1] !== '.') {
return DataType::TYPE_STRING;
diff --git a/src/PhpSpreadsheet/Document/Properties.php b/src/PhpSpreadsheet/Document/Properties.php
index 5762169184..6cad8a9ffd 100644
--- a/src/PhpSpreadsheet/Document/Properties.php
+++ b/src/PhpSpreadsheet/Document/Properties.php
@@ -149,8 +149,8 @@ private static function intOrFloatTimestamp(null|bool|float|int|string $timestam
$timestamp = (float) $timestamp;
} else {
$timestamp = (string) preg_replace('/[.][0-9]*$/', '', $timestamp);
- $timestamp = (string) preg_replace('/^(\\d{4})- (\\d)/', '$1-0$2', $timestamp);
- $timestamp = (string) preg_replace('/^(\\d{4}-\\d{2})- (\\d)/', '$1-0$2', $timestamp);
+ $timestamp = (string) preg_replace('/^(\d{4})- (\d)/', '$1-0$2', $timestamp);
+ $timestamp = (string) preg_replace('/^(\d{4}-\d{2})- (\d)/', '$1-0$2', $timestamp);
$timestamp = (float) (new DateTime($timestamp))->format('U');
}
}
diff --git a/src/PhpSpreadsheet/Reader/Html.php b/src/PhpSpreadsheet/Reader/Html.php
index 431a08ffff..2f4ef4f13e 100644
--- a/src/PhpSpreadsheet/Reader/Html.php
+++ b/src/PhpSpreadsheet/Reader/Html.php
@@ -35,7 +35,7 @@ class Html extends BaseReader
private const STARTS_WITH_BOM = '/^(?:\xfe\xff|\xff\xfe|\xEF\xBB\xBF)/';
- private const DECLARES_CHARSET = '/\\bcharset=/i';
+ private const DECLARES_CHARSET = '/\bcharset=/i';
/**
* Input encoding.
@@ -373,7 +373,7 @@ private function processDomElementSpanEtc(Worksheet $sheet, int &$row, string &$
}
if (isset($attributeArray['style'])) {
$alignStyle = $attributeArray['style'];
- if (preg_match('/\\btext-align:\\s*(left|right|center|justify)\\b/', $alignStyle, $matches) === 1) {
+ if (preg_match('/\btext-align:\s*(left|right|center|justify)\b/', $alignStyle, $matches) === 1) {
$sheet->getComment($column . $row)->setAlignment($matches[1]);
}
}
diff --git a/src/PhpSpreadsheet/Reader/Ods/FormulaTranslator.php b/src/PhpSpreadsheet/Reader/Ods/FormulaTranslator.php
index 6e54e0039e..123f909d3a 100644
--- a/src/PhpSpreadsheet/Reader/Ods/FormulaTranslator.php
+++ b/src/PhpSpreadsheet/Reader/Ods/FormulaTranslator.php
@@ -34,7 +34,7 @@ public static function convertToExcelAddressValue(string $openOfficeAddress): st
'/\$?([^\.]+)\.([^\.]+)/miu', // Cell reference in another sheet
'/\.([^\.]+):\.([^\.]+)/miu', // Cell range reference
'/\.([^\.]+)/miu', // Simple cell reference
- '/\\x{FFFE}/miu', // restore quoted periods
+ '/\x{FFFE}/miu', // restore quoted periods
],
[
'$1!$2:$4',
@@ -68,7 +68,7 @@ public static function convertToExcelFormulaValue(string $openOfficeFormula): st
'/\[\$?([^\.]+)\.([^\.]+)\]/miu', // Cell reference in another sheet
'/\[\.([^\.]+):\.([^\.]+)\]/miu', // Cell range reference
'/\[\.([^\.]+)\]/miu', // Simple cell reference
- '/\\x{FFFE}/miu', // restore quoted periods
+ '/\x{FFFE}/miu', // restore quoted periods
],
[
'$1!$2:$3',
diff --git a/src/PhpSpreadsheet/Reader/Security/XmlScanner.php b/src/PhpSpreadsheet/Reader/Security/XmlScanner.php
index be64981920..a80562b9f8 100644
--- a/src/PhpSpreadsheet/Reader/Security/XmlScanner.php
+++ b/src/PhpSpreadsheet/Reader/Security/XmlScanner.php
@@ -6,8 +6,8 @@
class XmlScanner
{
- private const ENCODING_PATTERN = '/encoding\\s*=\\s*(["\'])(.+?)\\1/s';
- private const ENCODING_UTF7 = '/encoding\\s*=\\s*(["\'])UTF-7\\1/si';
+ private const ENCODING_PATTERN = '/encoding\s*=\s*(["\'])(.+?)\1/s';
+ private const ENCODING_UTF7 = '/encoding\s*=\s*(["\'])UTF-7\1/si';
private string $pattern;
@@ -41,7 +41,7 @@ private function toUtf8(string $xml): string
$charset = $this->findCharSet($xml);
$foundUtf7 = $charset === 'UTF-7';
if ($charset !== 'UTF-8') {
- $testStart = '/^.{0,4}\\s*pattern)) . '\\0*/';
+ $pattern = '/\0*' . implode('\0*', str_split($this->pattern)) . '\0*/';
$xml = "$xml";
if (preg_match($pattern, $xml)) {
diff --git a/src/PhpSpreadsheet/Reader/Slk.php b/src/PhpSpreadsheet/Reader/Slk.php
index 7359f926e3..ce26eca202 100644
--- a/src/PhpSpreadsheet/Reader/Slk.php
+++ b/src/PhpSpreadsheet/Reader/Slk.php
@@ -361,7 +361,7 @@ private function styleSettings(string $rowDatum, array &$styleData, string &$fon
} elseif ($char == 'S') {
$styleData['fill']['fillType'] = Fill::FILL_PATTERN_GRAY125;
} elseif ($char == 'M') {
- if (preg_match('/M([1-9]\\d*)/', $styleSettings, $matches)) {
+ if (preg_match('/M([1-9]\d*)/', $styleSettings, $matches)) {
$fontStyle = $matches[1];
}
}
@@ -449,7 +449,7 @@ private function processPRecord(array $rowData, Spreadsheet &$spreadsheet): void
private function processPColors(string $rowDatum, array &$formatArray): void
{
- if (preg_match('/L([1-9]\\d*)/', $rowDatum, $matches)) {
+ if (preg_match('/L([1-9]\d*)/', $rowDatum, $matches)) {
$fontColor = ((int) $matches[1]) % 8;
$formatArray['font']['color']['argb'] = self::COLOR_ARRAY[$fontColor];
}
diff --git a/src/PhpSpreadsheet/Reader/Xlsx/DataValidations.php b/src/PhpSpreadsheet/Reader/Xlsx/DataValidations.php
index f6b33ef17c..bab9099b47 100644
--- a/src/PhpSpreadsheet/Reader/Xlsx/DataValidations.php
+++ b/src/PhpSpreadsheet/Reader/Xlsx/DataValidations.php
@@ -27,7 +27,7 @@ public function load(): void
$range = strtoupper((string) $dataValidation['sqref']);
$rangeSet = explode(' ', $range);
foreach ($rangeSet as $range) {
- if (preg_match('/^[A-Z]{1,3}\\d{1,7}/', $range, $matches) === 1) {
+ if (preg_match('/^[A-Z]{1,3}\d{1,7}/', $range, $matches) === 1) {
// Ensure left/top row of range exists, thereby
// adjusting high row/column.
$this->worksheet->getCell($matches[0]);
diff --git a/src/PhpSpreadsheet/Reader/Xml/DataValidations.php b/src/PhpSpreadsheet/Reader/Xml/DataValidations.php
index 2e08e25670..faa2fb2c28 100644
--- a/src/PhpSpreadsheet/Reader/Xml/DataValidations.php
+++ b/src/PhpSpreadsheet/Reader/Xml/DataValidations.php
@@ -83,7 +83,7 @@ public function loadDataValidations(SimpleXMLElement $worksheet, Spreadsheet $sp
$this->thisColumn = (int) $selectionMatches[2];
$combinedCells .= "$separator$cell";
$separator = ' ';
- } elseif (preg_match('/^C(\d+)(:C(]\\d+))?$/', (string) $range, $selectionMatches) === 1) {
+ } elseif (preg_match('/^C(\d+)(:C(]\d+))?$/', (string) $range, $selectionMatches) === 1) {
// column
$firstCol = $selectionMatches[1];
$firstColString = Coordinate::stringFromColumnIndex((int) $firstCol);
@@ -95,7 +95,7 @@ public function loadDataValidations(SimpleXMLElement $worksheet, Spreadsheet $sp
$sheet->getCell($firstCell);
$combinedCells .= "$separator$cell";
$separator = ' ';
- } elseif (preg_match('/^R(\\d+)(:R(]\\d+))?$/', (string) $range, $selectionMatches)) {
+ } elseif (preg_match('/^R(\d+)(:R(]\d+))?$/', (string) $range, $selectionMatches)) {
// row
$firstRow = $selectionMatches[1];
$lastRow = $selectionMatches[3] ?? $firstRow;
diff --git a/src/PhpSpreadsheet/Shared/Date.php b/src/PhpSpreadsheet/Shared/Date.php
index b20bb1d7bd..5e0235f8bd 100644
--- a/src/PhpSpreadsheet/Shared/Date.php
+++ b/src/PhpSpreadsheet/Shared/Date.php
@@ -177,7 +177,7 @@ public static function convertIsoDate(mixed $value): float|int
throw new Exception("Invalid string $value supplied for datatype Date");
}
- if (preg_match('/^\\s*\\d?\\d:\\d\\d(:\\d\\d([.]\\d+)?)?\\s*(am|pm)?\\s*$/i', $value) == 1) {
+ if (preg_match('/^\s*\d?\d:\d\d(:\d\d([.]\d+)?)?\s*(am|pm)?\s*$/i', $value) == 1) {
$newValue = fmod($newValue, 1.0);
}
diff --git a/src/PhpSpreadsheet/Shared/Font.php b/src/PhpSpreadsheet/Shared/Font.php
index 8a1225b1cf..f9370b4e18 100644
--- a/src/PhpSpreadsheet/Shared/Font.php
+++ b/src/PhpSpreadsheet/Shared/Font.php
@@ -563,7 +563,7 @@ public static function getTrueTypeFontFileFromFont(FontStyle $font, bool $checkP
if (mb_strlen(self::$trueTypeFontPath) > 1 && mb_substr(self::$trueTypeFontPath, -1) !== '/' && mb_substr(self::$trueTypeFontPath, -1) !== '\\') {
$separator = DIRECTORY_SEPARATOR;
}
- $fontFileAbsolute = preg_match('~^([A-Za-z]:)?[/\\\\]~', $fontFile) === 1;
+ $fontFileAbsolute = preg_match('~^([A-Za-z]:)?[/\\\]~', $fontFile) === 1;
if (!$fontFileAbsolute) {
$fontFile = self::findFontFile(self::$trueTypeFontPath, $fontFile) ?? self::$trueTypeFontPath . $separator . $fontFile;
}
diff --git a/src/PhpSpreadsheet/Style/NumberFormat/DateFormatter.php b/src/PhpSpreadsheet/Style/NumberFormat/DateFormatter.php
index 2aabd7f5f7..3c0d79aaa5 100644
--- a/src/PhpSpreadsheet/Style/NumberFormat/DateFormatter.php
+++ b/src/PhpSpreadsheet/Style/NumberFormat/DateFormatter.php
@@ -164,7 +164,7 @@ public static function format(mixed $value, string $format): string
// If the colon preceding minute had been quoted, as happens in
// Excel 2003 XML formats, m will not have been changed to i above.
// Change it now.
- $format = (string) \preg_replace('/\\\\:m/', ':i', $format);
+ $format = (string) \preg_replace('/\\\:m/', ':i', $format);
$microseconds = (int) $dateObj->format('u');
if (str_contains($format, ':s.000')) {
$milliseconds = (int) round($microseconds / 1000.0);
diff --git a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php
index c9032a44d1..bbc4677cfe 100644
--- a/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php
+++ b/src/PhpSpreadsheet/Style/NumberFormat/Formatter.php
@@ -55,8 +55,8 @@ private static function splitFormatForSectionSelection(array $sections, mixed $v
// 4 sections: [POSITIVE] [NEGATIVE] [ZERO] [TEXT]
$sectionCount = count($sections);
// Colour could be a named colour, or a numeric index entry in the colour-palette
- $color_regex = '/\\[(' . implode('|', Color::NAMED_COLORS) . '|color\\s*(\\d+))\\]/mui';
- $cond_regex = '/\\[(>|>=|<|<=|=|<>)([+-]?\\d+([.]\\d+)?)\\]/';
+ $color_regex = '/\[(' . implode('|', Color::NAMED_COLORS) . '|color\s*(\d+))\]/mui';
+ $cond_regex = '/\[(>|>=|<|<=|=|<>)([+-]?\d+([.]\d+)?)\]/';
$colors = ['', '', '', '', ''];
$conditionOperations = ['', '', '', '', ''];
$conditionComparisonValues = [0, 0, 0, 0, 0];
@@ -126,7 +126,7 @@ public static function toFormattedString($value, string $format, null|array|call
}
// For now we do not treat strings in sections, although section 4 of a format code affects strings
// Process a single block format code containing @ for text substitution
- $formatx = str_replace('\\"', self::QUOTE_REPLACEMENT, $format);
+ $formatx = str_replace('\"', self::QUOTE_REPLACEMENT, $format);
if (preg_match(self::SECTION_SPLIT, $format) === 0 && preg_match(self::SYMBOL_AT, $formatx) === 1) {
if (!str_contains($format, '"')) {
return str_replace('@', $value, $format);
@@ -134,7 +134,7 @@ public static function toFormattedString($value, string $format, null|array|call
//escape any dollar signs on the string, so they are not replaced with an empty value
$value = str_replace(
['$', '"'],
- ['\\$', self::QUOTE_REPLACEMENT],
+ ['\$', self::QUOTE_REPLACEMENT],
(string) $value
);
@@ -160,7 +160,7 @@ public static function toFormattedString($value, string $format, null|array|call
$format = (string) preg_replace('/^\[\$-[^\]]*\]/', '', $format);
$format = (string) preg_replace_callback(
- '/(["])(?:(?=(\\\\?))\\2.)*?\\1/u',
+ '/(["])(?:(?=(\\\?))\2.)*?\1/u',
fn (array $matches): string => str_replace('.', chr(0x00), $matches[0]),
$format
);
diff --git a/src/PhpSpreadsheet/Style/NumberFormat/FractionFormatter.php b/src/PhpSpreadsheet/Style/NumberFormat/FractionFormatter.php
index 86d2c99b8f..7affc2151f 100644
--- a/src/PhpSpreadsheet/Style/NumberFormat/FractionFormatter.php
+++ b/src/PhpSpreadsheet/Style/NumberFormat/FractionFormatter.php
@@ -61,7 +61,7 @@ public static function format(mixed $value, string $format): string
private static function getDecimal(string $value): string
{
$decimalPart = '0';
- if (preg_match('/^\\d*[.](\\d*[1-9])0*$/', $value, $matches) === 1) {
+ if (preg_match('/^\d*[.](\d*[1-9])0*$/', $value, $matches) === 1) {
$decimalPart = $matches[1];
}
diff --git a/src/PhpSpreadsheet/Style/NumberFormat/NumberFormatter.php b/src/PhpSpreadsheet/Style/NumberFormat/NumberFormatter.php
index ea7aa27c37..0305700575 100644
--- a/src/PhpSpreadsheet/Style/NumberFormat/NumberFormatter.php
+++ b/src/PhpSpreadsheet/Style/NumberFormat/NumberFormatter.php
@@ -7,7 +7,7 @@
class NumberFormatter extends BaseFormatter
{
- private const NUMBER_REGEX = '/(0+)(\\.?)(0*)/';
+ private const NUMBER_REGEX = '/(0+)(\.?)(0*)/';
private static function mergeComplexNumberFormatMasks(array $numbers, array $masks): array
{
@@ -212,11 +212,11 @@ public static function format(mixed $value, string $format): string
$paddingPlaceholder = (str_contains($format, '?'));
// Replace # or ? with 0
- $format = self::pregReplace('/[\\#\?](?=(?:[^"]*"[^"]*")*[^"]*\Z)/', '0', $format);
+ $format = self::pregReplace('/[\#\?](?=(?:[^"]*"[^"]*")*[^"]*\Z)/', '0', $format);
// Remove locale code [$-###] for an LCID
$format = self::pregReplace('/\[\$\-.*\]/', '', $format);
- $n = '/\\[[^\\]]+\\]/';
+ $n = '/\[[^\]]+\]/';
$m = self::pregReplace($n, '', $format);
// Some non-number strings are quoted, so we'll get rid of the quotes, likewise any positional * symbols
@@ -236,7 +236,7 @@ public static function format(mixed $value, string $format): string
if (preg_match('/\[\$(.*)\]/u', $format, $m)) {
// Currency or Accounting
- $value = preg_replace('/-0+(( |\\xc2\\xa0))?\\[/', '- [', (string) $value) ?? $value;
+ $value = preg_replace('/-0+(( |\xc2\xa0))?\[/', '- [', (string) $value) ?? $value;
$currencyCode = $m[1];
[$currencyCode] = explode('-', $currencyCode);
if ($currencyCode == '') {
diff --git a/src/PhpSpreadsheet/Style/NumberFormat/Wizard/CurrencyBase.php b/src/PhpSpreadsheet/Style/NumberFormat/Wizard/CurrencyBase.php
index 59e76db62a..af56b3bf57 100644
--- a/src/PhpSpreadsheet/Style/NumberFormat/Wizard/CurrencyBase.php
+++ b/src/PhpSpreadsheet/Style/NumberFormat/Wizard/CurrencyBase.php
@@ -173,7 +173,7 @@ public function format(): string
if ($symbolWithSpacing) {
$format .= '*' . $this->spaceOrNbsp;
}
- if ($negativeStart === '\\(' || ($symbolWithSpacing && $negativeStart === '-')) {
+ if ($negativeStart === '\(' || ($symbolWithSpacing && $negativeStart === '-')) {
$format .= $negativeStart;
}
} else {
diff --git a/src/PhpSpreadsheet/Style/NumberFormat/Wizard/CurrencyNegative.php b/src/PhpSpreadsheet/Style/NumberFormat/Wizard/CurrencyNegative.php
index d075d80af8..07e368fda1 100644
--- a/src/PhpSpreadsheet/Style/NumberFormat/Wizard/CurrencyNegative.php
+++ b/src/PhpSpreadsheet/Style/NumberFormat/Wizard/CurrencyNegative.php
@@ -13,7 +13,7 @@ public function start(): string
{
return match ($this) {
self::minus, self::redMinus => '-',
- self::parentheses, self::redParentheses => '\\(',
+ self::parentheses, self::redParentheses => '\(',
};
}
@@ -21,7 +21,7 @@ public function end(): string
{
return match ($this) {
self::minus, self::redMinus => '',
- self::parentheses, self::redParentheses => '\\)',
+ self::parentheses, self::redParentheses => '\)',
};
}
diff --git a/src/PhpSpreadsheet/Worksheet/AutoFilter.php b/src/PhpSpreadsheet/Worksheet/AutoFilter.php
index 138532112e..744492bba9 100644
--- a/src/PhpSpreadsheet/Worksheet/AutoFilter.php
+++ b/src/PhpSpreadsheet/Worksheet/AutoFilter.php
@@ -145,7 +145,7 @@ public function setRangeToMaxRow(): self
$this->evaluated = false;
if ($this->workSheet !== null) {
$thisrange = $this->range;
- $range = (string) preg_replace('/\\d+$/', (string) $this->workSheet->getHighestRow(), $thisrange);
+ $range = (string) preg_replace('/\d+$/', (string) $this->workSheet->getHighestRow(), $thisrange);
if ($range !== $thisrange) {
$this->setRange($range);
}
diff --git a/src/PhpSpreadsheet/Worksheet/Drawing.php b/src/PhpSpreadsheet/Worksheet/Drawing.php
index 09e32ff2f4..5f2e74518e 100644
--- a/src/PhpSpreadsheet/Worksheet/Drawing.php
+++ b/src/PhpSpreadsheet/Worksheet/Drawing.php
@@ -103,7 +103,7 @@ public function setPath(string $path, bool $verifyFile = true, ?ZipArchive $zip
$this->path = '';
// Check if a URL has been passed. https://stackoverflow.com/a/2058596/1252979
- if (filter_var($path, FILTER_VALIDATE_URL) || (preg_match('/^([\\w\\s\\x00-\\x1f]+):/u', $path) && !preg_match('/^([\\w]+):/u', $path))) {
+ if (filter_var($path, FILTER_VALIDATE_URL) || (preg_match('/^([\w\s\x00-\x1f]+):/u', $path) && !preg_match('/^([\w]+):/u', $path))) {
if (!preg_match('/^(http|https|file|ftp|s3):/', $path)) {
throw new PhpSpreadsheetException('Invalid protocol for linked drawing');
}
diff --git a/src/PhpSpreadsheet/Worksheet/Table.php b/src/PhpSpreadsheet/Worksheet/Table.php
index a7a62a954c..efc2d2d63a 100644
--- a/src/PhpSpreadsheet/Worksheet/Table.php
+++ b/src/PhpSpreadsheet/Worksheet/Table.php
@@ -117,10 +117,10 @@ public function setName(string $name): self
) {
throw new PhpSpreadsheetException('The table name can\'t be the same as a cell reference');
}
- if (!preg_match('/^[\p{L}_\\\\]/iu', $name)) {
+ if (!preg_match('/^[\p{L}_\\\]/iu', $name)) {
throw new PhpSpreadsheetException('The table name must begin a name with a letter, an underscore character (_), or a backslash (\)');
}
- if (!preg_match('/^[\p{L}_\\\\][\p{L}\p{M}0-9\._]+$/iu', $name)) {
+ if (!preg_match('/^[\p{L}_\\\][\p{L}\p{M}0-9\._]+$/iu', $name)) {
throw new PhpSpreadsheetException('The table name contains invalid characters');
}
@@ -318,7 +318,7 @@ public function setRangeToMaxRow(): self
{
if ($this->workSheet !== null) {
$thisrange = $this->range;
- $range = (string) preg_replace('/\\d+$/', (string) $this->workSheet->getHighestRow(), $thisrange);
+ $range = (string) preg_replace('/\d+$/', (string) $this->workSheet->getHighestRow(), $thisrange);
if ($range !== $thisrange) {
$this->setRange($range);
}
diff --git a/src/PhpSpreadsheet/Worksheet/Validations.php b/src/PhpSpreadsheet/Worksheet/Validations.php
index e7ecdf5f38..75de218955 100644
--- a/src/PhpSpreadsheet/Worksheet/Validations.php
+++ b/src/PhpSpreadsheet/Worksheet/Validations.php
@@ -63,7 +63,7 @@ public static function validateCellOrCellRange(AddressRange|CellAddress|int|stri
public static function convertWholeRowColumn(?string $addressRange): string
{
return (string) preg_replace(
- ['/^([A-Z]+):([A-Z]+)$/i', '/^(\\d+):(\\d+)$/'],
+ ['/^([A-Z]+):([A-Z]+)$/i', '/^(\d+):(\d+)$/'],
[self::SETMAXROW, self::SETMAXCOL],
$addressRange ?? ''
);
diff --git a/src/PhpSpreadsheet/Worksheet/Worksheet.php b/src/PhpSpreadsheet/Worksheet/Worksheet.php
index 44ede2add2..376185ed1a 100644
--- a/src/PhpSpreadsheet/Worksheet/Worksheet.php
+++ b/src/PhpSpreadsheet/Worksheet/Worksheet.php
@@ -49,7 +49,7 @@ class Worksheet
public const MERGE_CELL_CONTENT_HIDE = 'hide';
public const MERGE_CELL_CONTENT_MERGE = 'merge';
- public const FUNCTION_LIKE_GROUPBY = '/\\b(groupby|_xleta)\\b/i'; // weird new syntax
+ public const FUNCTION_LIKE_GROUPBY = '/\b(groupby|_xleta)\b/i'; // weird new syntax
protected const SHEET_NAME_REQUIRES_NO_QUOTES = '/^[_\p{L}][_\p{L}\p{N}]*$/mui';
@@ -1740,7 +1740,7 @@ public function mergeCells(AddressRange|string|array $range, string $behaviour =
$range .= ":{$range}";
}
- if (preg_match('/^([A-Z]+)(\\d+):([A-Z]+)(\\d+)$/', $range, $matches) !== 1) {
+ if (preg_match('/^([A-Z]+)(\d+):([A-Z]+)(\d+)$/', $range, $matches) !== 1) {
throw new Exception('Merge must be on a valid range of cells.');
}
diff --git a/src/PhpSpreadsheet/Writer/Html.php b/src/PhpSpreadsheet/Writer/Html.php
index c2771d0f1c..908d4e94a0 100644
--- a/src/PhpSpreadsheet/Writer/Html.php
+++ b/src/PhpSpreadsheet/Writer/Html.php
@@ -1405,7 +1405,7 @@ private function generateRowCellData(Worksheet $worksheet, null|Cell|string $cel
// Converts the cell content so that spaces occuring at beginning of each new line are replaced by
// Example: " Hello\n to the world" is converted to " Hello\n to the world"
- $cellData = Preg::replace('/(?m)(?:^|\\G) /', ' ', $cellData);
+ $cellData = Preg::replace('/(?m)(?:^|\G) /', ' ', $cellData);
// convert newline "\n" to '
'
$cellData = nl2br($cellData);
@@ -1593,8 +1593,8 @@ private function generateRow(Worksheet $worksheet, array $values, int $row, stri
if ($worksheet->hyperlinkExists($coordinate) && !$worksheet->getHyperlink($coordinate)->isInternal()) {
$url = $worksheet->getHyperlink($coordinate)->getUrl();
$urlDecode1 = html_entity_decode($url, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
- $urlTrim = Preg::replace('/^\\s+/u', '', $urlDecode1);
- $parseScheme = Preg::isMatch('/^([\\w\\s\\x00-\\x1f]+):/u', strtolower($urlTrim), $matches);
+ $urlTrim = Preg::replace('/^\s+/u', '', $urlDecode1);
+ $parseScheme = Preg::isMatch('/^([\w\s\x00-\x1f]+):/u', strtolower($urlTrim), $matches);
if ($parseScheme && !in_array($matches[1], ['http', 'https', 'file', 'ftp', 'mailto', 's3'], true)) {
$cellData = htmlspecialchars($url, Settings::htmlEntityFlags());
$cellData = self::replaceControlChars($cellData);
@@ -1660,7 +1660,7 @@ private static function replaceNonAscii(array $matches): string
private static function replaceControlChars(string $convert): string
{
return (string) preg_replace_callback(
- '/[\\x00-\\x1f]/',
+ '/[\x00-\x1f]/',
[self::class, 'replaceNonAscii'],
$convert
);
@@ -1763,7 +1763,7 @@ public static function formatColorStatic(string $value, string $format): string
$color = null; // initialize
$matches = [];
- $color_regex = '/^\\[[a-zA-Z]+\\]/';
+ $color_regex = '/^\[[a-zA-Z]+\]/';
if (Preg::isMatch($color_regex, $format, $matches)) {
$color = str_replace(['[', ']'], '', $matches[0]);
$color = strtolower($color);
diff --git a/src/PhpSpreadsheet/Writer/Xls/Parser.php b/src/PhpSpreadsheet/Writer/Xls/Parser.php
index 5324a7bf51..f552dad8ac 100644
--- a/src/PhpSpreadsheet/Writer/Xls/Parser.php
+++ b/src/PhpSpreadsheet/Writer/Xls/Parser.php
@@ -49,22 +49,22 @@ class Parser
// Former value for this constant led to "catastrophic backtracking",
// unable to handle double apostrophes.
// (*COMMIT) should prevent this.
- const REGEX_SHEET_TITLE_QUOTED = "([^*:/\\\\?\[\]']|'')+";
+ const REGEX_SHEET_TITLE_QUOTED = "([^*:/\\\\?\\[\\]']|'')+";
const REGEX_CELL_TITLE_QUOTED = "~^'"
. self::REGEX_SHEET_TITLE_QUOTED
. '(:' . self::REGEX_SHEET_TITLE_QUOTED . ')?'
. "'!(*COMMIT)"
- . '[$]?[A-Ia-i]?[A-Za-z][$]?(\\d+)'
+ . '[$]?[A-Ia-i]?[A-Za-z][$]?(\d+)'
. '$~u';
const REGEX_RANGE_TITLE_QUOTED = "~^'"
. self::REGEX_SHEET_TITLE_QUOTED
. '(:' . self::REGEX_SHEET_TITLE_QUOTED . ')?'
. "'!(*COMMIT)"
- . '[$]?[A-Ia-i]?[A-Za-z][$]?(\\d+)'
+ . '[$]?[A-Ia-i]?[A-Za-z][$]?(\d+)'
. ':'
- . '[$]?[A-Ia-i]?[A-Za-z][$]?(\\d+)'
+ . '[$]?[A-Ia-i]?[A-Za-z][$]?(\d+)'
. '$~u';
private const UTF8 = 'UTF-8';
@@ -511,7 +511,7 @@ private function convert(string $token): string
return $this->convertRef2d($token);
}
// match external references like Sheet1!A1 or Sheet1:Sheet2!A1 or Sheet1!$A$1 or Sheet1:Sheet2!$A$1
- if (Preg::isMatch('/^' . self::REGEX_SHEET_TITLE_UNQUOTED . '(\\:' . self::REGEX_SHEET_TITLE_UNQUOTED . ')?\\!\$?[A-Ia-i]?[A-Za-z]\$?(\\d+)$/u', $token)) {
+ if (Preg::isMatch('/^' . self::REGEX_SHEET_TITLE_UNQUOTED . '(\:' . self::REGEX_SHEET_TITLE_UNQUOTED . ')?\!\$?[A-Ia-i]?[A-Za-z]\$?(\d+)$/u', $token)) {
return $this->convertRef3d($token);
}
// match external references like 'Sheet1'!A1 or 'Sheet1:Sheet2'!A1 or 'Sheet1'!$A$1 or 'Sheet1:Sheet2'!$A$1
@@ -523,7 +523,7 @@ private function convert(string $token): string
return $this->convertRange2d($token);
}
// match external ranges like Sheet1!A1:B2 or Sheet1:Sheet2!A1:B2 or Sheet1!$A$1:$B$2 or Sheet1:Sheet2!$A$1:$B$2
- if (Preg::isMatch('/^' . self::REGEX_SHEET_TITLE_UNQUOTED . '(\\:' . self::REGEX_SHEET_TITLE_UNQUOTED . ')?\\!\$?([A-Ia-i]?[A-Za-z])?\$?(\\d+)\\:\$?([A-Ia-i]?[A-Za-z])?\$?(\\d+)$/u', $token)) {
+ if (Preg::isMatch('/^' . self::REGEX_SHEET_TITLE_UNQUOTED . '(\:' . self::REGEX_SHEET_TITLE_UNQUOTED . ')?\!\$?([A-Ia-i]?[A-Za-z])?\$?(\d+)\:\$?([A-Ia-i]?[A-Za-z])?\$?(\d+)$/u', $token)) {
return $this->convertRange3d($token);
}
// match external ranges like 'Sheet1'!A1:B2 or 'Sheet1:Sheet2'!A1:B2 or 'Sheet1'!$A$1:$B$2 or 'Sheet1:Sheet2'!$A$1:$B$2
@@ -535,7 +535,7 @@ private function convert(string $token): string
return pack('C', $this->ptg[$token]);
}
// match error codes
- if (Preg::isMatch('/^#[A-Z0\\/]{3,5}[!?]{1}$/', $token) || $token == '#N/A') {
+ if (Preg::isMatch('/^#[A-Z0\/]{3,5}[!?]{1}$/', $token) || $token == '#N/A') {
return $this->convertError($token);
}
if (Preg::isMatch('/^' . Calculation::CALCULATION_REGEXP_DEFINEDNAME . '$/mui', $token) && $this->spreadsheet->getDefinedName($token) !== null) {
@@ -569,7 +569,7 @@ private function convert(string $token): string
private function convertNumber(mixed $num): string
{
// Integer in the range 0..2**16-1
- if ((Preg::isMatch('/^\\d+$/', (string) $num)) && ($num <= 65535)) {
+ if ((Preg::isMatch('/^\d+$/', (string) $num)) && ($num <= 65535)) {
return pack('Cv', $this->ptg['ptgInt'], $num);
}
@@ -680,7 +680,7 @@ private function convertRange3d(string $token): string
[$cell1, $cell2] = explode(':', $range ?? '');
// Convert the cell references
- if (Preg::isMatch('/^(\$)?[A-Ia-i]?[A-Za-z](\$)?(\\d+)$/', $cell1)) {
+ if (Preg::isMatch('/^(\$)?[A-Ia-i]?[A-Za-z](\$)?(\d+)$/', $cell1)) {
[$row1, $col1] = $this->cellToPackedRowcol($cell1);
[$row2, $col2] = $this->cellToPackedRowcol($cell2);
} else { // It's a rows range (like 26:27)
@@ -1087,7 +1087,7 @@ private function match(string $token): string
}
// If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1 or Sheet1!$A$1 or Sheet1:Sheet2!$A$1)
if (
- Preg::isMatch('/^' . self::REGEX_SHEET_TITLE_UNQUOTED . '(\\:' . self::REGEX_SHEET_TITLE_UNQUOTED . ')?\\!\$?[A-Ia-i]?[A-Za-z]\$?\\d+$/u', $token)
+ Preg::isMatch('/^' . self::REGEX_SHEET_TITLE_UNQUOTED . '(\:' . self::REGEX_SHEET_TITLE_UNQUOTED . ')?\!\$?[A-Ia-i]?[A-Za-z]\$?\d+$/u', $token)
&& !Preg::isMatch('/\d/', $this->lookAhead)
&& ($this->lookAhead !== ':')
&& ($this->lookAhead !== '.')
@@ -1097,7 +1097,7 @@ private function match(string $token): string
// If it's an external reference ('Sheet1'!A1 or 'Sheet1:Sheet2'!A1 or 'Sheet1'!$A$1 or 'Sheet1:Sheet2'!$A$1)
if (
self::matchCellSheetnameQuoted($token)
- && !Preg::isMatch('/\\d/', $this->lookAhead)
+ && !Preg::isMatch('/\d/', $this->lookAhead)
&& ($this->lookAhead !== ':') && ($this->lookAhead !== '.')
) {
return $token;
@@ -1117,8 +1117,8 @@ private function match(string $token): string
Preg::isMatch(
'/^'
. self::REGEX_SHEET_TITLE_UNQUOTED
- . '(\\:' . self::REGEX_SHEET_TITLE_UNQUOTED
- . ')?\\!\$?([A-Ia-i]?[A-Za-z])?\$?\\d+:\$?([A-Ia-i]?[A-Za-z])?\$?\\d+$/u',
+ . '(\:' . self::REGEX_SHEET_TITLE_UNQUOTED
+ . ')?\!\$?([A-Ia-i]?[A-Za-z])?\$?\d+:\$?([A-Ia-i]?[A-Za-z])?\$?\d+$/u',
$token
)
&& !Preg::isMatch('/\d/', $this->lookAhead)
@@ -1128,7 +1128,7 @@ private function match(string $token): string
// If it's an external range like 'Sheet1'!A1:B2 or 'Sheet1:Sheet2'!A1:B2 or 'Sheet1'!$A$1:$B$2 or 'Sheet1:Sheet2'!$A$1:$B$2
if (
self::matchRangeSheetnameQuoted($token)
- && !Preg::isMatch('/\\d/', $this->lookAhead)
+ && !Preg::isMatch('/\d/', $this->lookAhead)
) {
return $token;
}
@@ -1146,7 +1146,7 @@ private function match(string $token): string
}
// If it's an error code
if (
- Preg::isMatch('/^#[A-Z0\\/]{3,5}[!?]{1}$/', $token)
+ Preg::isMatch('/^#[A-Z0\/]{3,5}[!?]{1}$/', $token)
|| $token === '#N/A'
) {
return $token;
@@ -1272,7 +1272,7 @@ private function expression(): array
return $result;
}
if (
- Preg::isMatch('/^#[A-Z0\\/]{3,5}[!?]{1}$/', $this->currentToken)
+ Preg::isMatch('/^#[A-Z0\/]{3,5}[!?]{1}$/', $this->currentToken)
|| $this->currentToken == '#N/A'
) { // error code
$result = $this->createTree($this->currentToken, 'ptgErr', '');
@@ -1396,8 +1396,8 @@ private function fact(): array
Preg::isMatch(
'/^'
. self::REGEX_SHEET_TITLE_UNQUOTED
- . '(\\:' . self::REGEX_SHEET_TITLE_UNQUOTED
- . ')?\\!\$?[A-Ia-i]?[A-Za-z]\$?\\d+$/u',
+ . '(\:' . self::REGEX_SHEET_TITLE_UNQUOTED
+ . ')?\!\$?[A-Ia-i]?[A-Za-z]\$?\d+$/u',
$this->currentToken
)
) {
@@ -1435,9 +1435,9 @@ private function fact(): array
Preg::isMatch(
'/^'
. self::REGEX_SHEET_TITLE_UNQUOTED
- . '(\\:'
+ . '(\:'
. self::REGEX_SHEET_TITLE_UNQUOTED
- . ')?\\!\$?([A-Ia-i]?[A-Za-z])?\$?\\d+:\$?([A-Ia-i]?[A-Za-z])?\$?\\d+$/u',
+ . ')?\!\$?([A-Ia-i]?[A-Za-z])?\$?\d+:\$?([A-Ia-i]?[A-Za-z])?\$?\d+$/u',
$this->currentToken
)
) {
@@ -1613,7 +1613,7 @@ public function toReversePolish(array $tree = []): string
Preg::isMatch("/^[A-Z0-9\xc0-\xdc\\.]+$/", $tree['value'])
&& !Preg::isMatch('/^([A-Ia-i]?[A-Za-z])(\d+)$/', $tree['value'])
&& !Preg::isMatch(
- '/^[A-Ia-i]?[A-Za-z](\\d+)\\.\\.[A-Ia-i]?[A-Za-z](\\d+)$/',
+ '/^[A-Ia-i]?[A-Za-z](\d+)\.\.[A-Ia-i]?[A-Za-z](\d+)$/',
$tree['value']
)
&& !is_numeric($tree['value'])
diff --git a/src/PhpSpreadsheet/Writer/Xls/Worksheet.php b/src/PhpSpreadsheet/Writer/Xls/Worksheet.php
index 4306641f8c..8ca3f2f16c 100644
--- a/src/PhpSpreadsheet/Writer/Xls/Worksheet.php
+++ b/src/PhpSpreadsheet/Writer/Xls/Worksheet.php
@@ -464,7 +464,7 @@ public function close(): void
$url = str_replace('sheet://', 'internal:', $url);
} elseif (Preg::isMatch('/^(http:|https:|ftp:|mailto:)/', $url)) {
// URL
- } elseif (!empty($hyperlinkbase) && !Preg::isMatch('~^([A-Za-z]:)?[/\\\\]~', $url)) {
+ } elseif (!empty($hyperlinkbase) && !Preg::isMatch('~^([A-Za-z]:)?[/\\\]~', $url)) {
$url = "$hyperlinkbase$url";
if (!Preg::isMatch('/^(http:|https:|ftp:|mailto:)/', $url)) {
$url = 'external:' . $url;
@@ -1060,7 +1060,7 @@ private function writeUrlExternal(int $row1, int $col1, int $row2, int $col2, st
{
// Network drives are different. We will handle them separately
// MS/Novell network drives and shares start with \\
- if (Preg::isMatch('[^external:\\\\]', $url)) {
+ if (Preg::isMatch('[^external:\\\]', $url)) {
return;
}
@@ -1085,7 +1085,7 @@ private function writeUrlExternal(int $row1, int $col1, int $row2, int $col2, st
// parameters accordingly.
// Split the dir name and sheet name (if it exists)
$dir_long = $url;
- if (Preg::isMatch('/\\#/', $url)) {
+ if (Preg::isMatch('/\#/', $url)) {
$link_type |= 0x08;
}
@@ -1093,11 +1093,11 @@ private function writeUrlExternal(int $row1, int $col1, int $row2, int $col2, st
$link_type = pack('V', $link_type);
// Calculate the up-level dir count e.g.. (..\..\..\ == 3)
- $up_count = Preg::isMatchAll('/\\.\\.\\\\/', $dir_long, $useless);
+ $up_count = Preg::isMatchAll('/\.\.\\\/', $dir_long, $useless);
$up_count = pack('v', $up_count);
// Store the short dos dir name (null terminated)
- $dir_short = Preg::replace('/\\.\\.\\\\/', '', $dir_long) . "\0";
+ $dir_short = Preg::replace('/\.\.\\\/', '', $dir_long) . "\0";
// Store the long dir name as a wchar string (non-null terminated)
//$dir_long = $dir_long . "\0";
diff --git a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCscTest.php b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCscTest.php
index 83cc422dc3..21cfaec376 100644
--- a/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCscTest.php
+++ b/tests/PhpSpreadsheetTests/Calculation/Functions/Engineering/ImCscTest.php
@@ -119,12 +119,12 @@ public function testImCscArray(array $expectedResult, string $complex): void
// Avoid testing for excess precision
foreach ($expectedResult as &$array) {
foreach ($array as &$string) {
- $string = preg_replace('/(\\d{8})\\d+/', '$1', $string);
+ $string = preg_replace('/(\d{8})\d+/', '$1', $string);
}
}
foreach ($result as &$array) {
foreach ($array as &$string) {
- $string = preg_replace('/(\\d{8})\\d+/', '$1', $string);
+ $string = preg_replace('/(\d{8})\d+/', '$1', $string);
}
}
diff --git a/tests/PhpSpreadsheetTests/IOFactoryTest.php b/tests/PhpSpreadsheetTests/IOFactoryTest.php
index 86244e7de5..4693a2f992 100644
--- a/tests/PhpSpreadsheetTests/IOFactoryTest.php
+++ b/tests/PhpSpreadsheetTests/IOFactoryTest.php
@@ -191,21 +191,21 @@ public function testCreateReaderUnknownExtension(): void
{
$filename = 'samples/Reader2/sampleData/example1.tsv';
$reader = IOFactory::createReaderForFile($filename);
- self::assertEquals('PhpOffice\\PhpSpreadsheet\\Reader\\Csv', $reader::class);
+ self::assertEquals('PhpOffice\PhpSpreadsheet\Reader\Csv', $reader::class);
}
public function testCreateReaderCsvExtension(): void
{
$filename = 'samples/Reader2/sampleData/example1.csv';
$reader = IOFactory::createReaderForFile($filename);
- self::assertEquals('PhpOffice\\PhpSpreadsheet\\Reader\\Csv', $reader::class);
+ self::assertEquals('PhpOffice\PhpSpreadsheet\Reader\Csv', $reader::class);
}
public function testCreateReaderNoExtension(): void
{
$filename = 'samples/Reader/sampleData/example1xls';
$reader = IOFactory::createReaderForFile($filename);
- self::assertEquals('PhpOffice\\PhpSpreadsheet\\Reader\\Xls', $reader::class);
+ self::assertEquals('PhpOffice\PhpSpreadsheet\Reader\Xls', $reader::class);
}
public function testCreateReaderNotSpreadsheet(): void
diff --git a/tests/PhpSpreadsheetTests/Reader/Gnumeric/GnumericLoadTest.php b/tests/PhpSpreadsheetTests/Reader/Gnumeric/GnumericLoadTest.php
index 3f862cb99b..1384156787 100644
--- a/tests/PhpSpreadsheetTests/Reader/Gnumeric/GnumericLoadTest.php
+++ b/tests/PhpSpreadsheetTests/Reader/Gnumeric/GnumericLoadTest.php
@@ -31,10 +31,10 @@ public function testLoad(): void
$props = $spreadsheet->getProperties();
self::assertEquals('Mark Baker', $props->getCreator());
$creationDate = $props->getCreated();
- $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
+ $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\TH:i:s\Z', new DateTimeZone('UTC'));
self::assertEquals('2010-09-02T20:48:39Z', $result);
$creationDate = $props->getModified();
- $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
+ $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\TH:i:s\Z', new DateTimeZone('UTC'));
self::assertEquals('2020-06-05T05:15:21Z', $result);
$sheet = $spreadsheet->getSheet(0);
diff --git a/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php b/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php
index fa099ef76c..50b72d0c39 100644
--- a/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php
+++ b/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php
@@ -31,7 +31,7 @@ public static function providerValidXML(): array
$expectedResult = (string) file_get_contents($file);
if (preg_match('/UTF-16(LE|BE)?/', $file, $matches) == 1) {
$expectedResult = (string) mb_convert_encoding($expectedResult, 'UTF-8', $matches[0]);
- $expectedResult = preg_replace('/encoding\\s*=\\s*[\'"]UTF-\\d+(LE|BE)?[\'"]/', '', $expectedResult) ?? $expectedResult;
+ $expectedResult = preg_replace('/encoding\s*=\s*[\'"]UTF-\d+(LE|BE)?[\'"]/', '', $expectedResult) ?? $expectedResult;
}
$tests[basename($file)] = [$filename, $expectedResult];
}
diff --git a/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3730Test.php b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3730Test.php
index db8ac2fd50..c83c4a0c4a 100644
--- a/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3730Test.php
+++ b/tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3730Test.php
@@ -14,7 +14,7 @@ public function testPreliminaries(): void
{
$file = 'zip://';
$file .= self::$testbook;
- $file .= '#xl\\_rels\\workbook.xml.rels'; // no idea why backslash
+ $file .= '#xl\_rels\workbook.xml.rels'; // no idea why backslash
$data = file_get_contents($file);
// confirm that file contains expected absolute reference
if ($data === false) {
diff --git a/tests/PhpSpreadsheetTests/Reader/Xml/XmlLoadTest.php b/tests/PhpSpreadsheetTests/Reader/Xml/XmlLoadTest.php
index b3ff5cb358..57fe045432 100644
--- a/tests/PhpSpreadsheetTests/Reader/Xml/XmlLoadTest.php
+++ b/tests/PhpSpreadsheetTests/Reader/Xml/XmlLoadTest.php
@@ -58,16 +58,16 @@ public function xtestLoad(): void
$props = $spreadsheet->getProperties();
self::assertEquals('Mark Baker', $props->getCreator());
$creationDate = $props->getCreated();
- $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
+ $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\TH:i:s\Z', new DateTimeZone('UTC'));
self::assertEquals('2010-09-02T20:48:39Z', $result);
$creationDate = $props->getModified();
- $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
+ $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\TH:i:s\Z', new DateTimeZone('UTC'));
self::assertEquals('2010-09-03T21:48:39Z', $result);
self::assertEquals('AbCd1234', $props->getCustomPropertyValue('my_API_Token'));
self::assertEquals('2', $props->getCustomPropertyValue('myŚInt'));
/** @var string */
$creationDate = $props->getCustomPropertyValue('my_API_Token_Expiry');
- $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\\TH:i:s\\Z', new DateTimeZone('UTC'));
+ $result = Date::formattedDateTimeFromTimestamp("$creationDate", 'Y-m-d\TH:i:s\Z', new DateTimeZone('UTC'));
self::assertEquals('2019-01-31T07:00:00Z', $result);
$sheet = $spreadsheet->getSheet(0);
diff --git a/tests/PhpSpreadsheetTests/Writer/Csv/CsvEnclosureTest.php b/tests/PhpSpreadsheetTests/Writer/Csv/CsvEnclosureTest.php
index ffbdf453c1..c8a050412f 100644
--- a/tests/PhpSpreadsheetTests/Writer/Csv/CsvEnclosureTest.php
+++ b/tests/PhpSpreadsheetTests/Writer/Csv/CsvEnclosureTest.php
@@ -43,7 +43,7 @@ public function testNormalEnclosure(): void
$filename = File::temporaryFilename();
$writer->save($filename);
$filedata = self::getFileData($filename);
- $filedata = preg_replace('/\\r?\\n/', $delimiter, $filedata);
+ $filedata = preg_replace('/\r?\n/', $delimiter, $filedata);
$reader = new CsvReader();
$reader->setDelimiter($delimiter);
$reader->setEnclosure($enclosure);
@@ -76,7 +76,7 @@ public function testNoEnclosure(): void
$filename = File::temporaryFilename();
$writer->save($filename);
$filedata = self::getFileData($filename);
- $filedata = preg_replace('/\\r?\\n/', $delimiter, $filedata);
+ $filedata = preg_replace('/\r?\n/', $delimiter, $filedata);
$reader = new CsvReader();
$reader->setDelimiter($delimiter);
$reader->setEnclosure($enclosure);
@@ -109,7 +109,7 @@ public function testNotRequiredEnclosure1(): void
$filename = File::temporaryFilename();
$writer->save($filename);
$filedata = self::getFileData($filename);
- $filedata = preg_replace('/\\r?\\n/', $delimiter, $filedata);
+ $filedata = preg_replace('/\r?\n/', $delimiter, $filedata);
$reader = new CsvReader();
$reader->setDelimiter($delimiter);
$reader->setEnclosure($enclosure);
@@ -170,7 +170,7 @@ public function testNotRequiredEnclosure2(): void
$filename = File::temporaryFilename();
$writer->save($filename);
$filedata = self::getFileData($filename);
- $filedata = preg_replace('/\\r/', '', $filedata);
+ $filedata = preg_replace('/\r/', '', $filedata);
$reader = new CsvReader();
$reader->setDelimiter($delimiter);
$reader->setEnclosure($enclosure);
@@ -229,7 +229,7 @@ public function testRequiredEnclosure2(): void
$filename = File::temporaryFilename();
$writer->save($filename);
$filedata = self::getFileData($filename);
- $filedata = preg_replace('/\\r/', '', $filedata);
+ $filedata = preg_replace('/\r/', '', $filedata);
$reader = new CsvReader();
$reader->setDelimiter($delimiter);
$reader->setEnclosure($enclosure);
diff --git a/tests/PhpSpreadsheetTests/Writer/Dompdf/HideMergeTest.php b/tests/PhpSpreadsheetTests/Writer/Dompdf/HideMergeTest.php
index c27545ea57..7bbe5c6cc3 100644
--- a/tests/PhpSpreadsheetTests/Writer/Dompdf/HideMergeTest.php
+++ b/tests/PhpSpreadsheetTests/Writer/Dompdf/HideMergeTest.php
@@ -82,8 +82,8 @@ public function testHideWithMerge(): void
$worksheet->getColumnDimension('A')->setVisible(false);
$Dompdf = new Dompdf($spreadsheet);
$html = $Dompdf->generateHtmlAll();
- $html = preg_replace('/^\\s+/m', '', $html) ?? $html;
- $html = preg_replace('/[\\n\\r]/', '', $html) ?? $html;
+ $html = preg_replace('/^\s+/m', '', $html) ?? $html;
+ $html = preg_replace('/[\n\r]/', '', $html) ?? $html;
self::assertStringContainsString(
'table.sheet0 .column0 { display:none }',
$html
diff --git a/tests/PhpSpreadsheetTests/Writer/Html/HideMergeTest.php b/tests/PhpSpreadsheetTests/Writer/Html/HideMergeTest.php
index 1075bcca2b..2411c155c0 100644
--- a/tests/PhpSpreadsheetTests/Writer/Html/HideMergeTest.php
+++ b/tests/PhpSpreadsheetTests/Writer/Html/HideMergeTest.php
@@ -82,8 +82,8 @@ public function testHideWithMerge(): void
$worksheet->getColumnDimension('A')->setVisible(false);
$Dompdf = new Html($spreadsheet);
$html = $Dompdf->generateHtmlAll();
- $html = preg_replace('/^\\s+/m', '', $html) ?? $html;
- $html = preg_replace('/[\\n\\r]/', '', $html) ?? $html;
+ $html = preg_replace('/^\s+/m', '', $html) ?? $html;
+ $html = preg_replace('/[\n\r]/', '', $html) ?? $html;
self::assertStringContainsString(
'table.sheet0 .column0 { display:none }',
$html
diff --git a/tests/PhpSpreadsheetTests/Writer/Html/InvalidFileNameTest.php b/tests/PhpSpreadsheetTests/Writer/Html/InvalidFileNameTest.php
index e4621c58a3..aaf3ef0fad 100644
--- a/tests/PhpSpreadsheetTests/Writer/Html/InvalidFileNameTest.php
+++ b/tests/PhpSpreadsheetTests/Writer/Html/InvalidFileNameTest.php
@@ -57,7 +57,7 @@ public function testEmptyTempdirNamePdf(): void
public function testWinFileNames(): void
{
- self::assertEquals('file:///C:/temp/filename.xlsx', Html::winFileToUrl('C:\\temp\filename.xlsx'));
+ self::assertEquals('file:///C:/temp/filename.xlsx', Html::winFileToUrl('C:\temp\filename.xlsx'));
self::assertEquals('/tmp/filename.xlsx', Html::winFileToUrl('/tmp/filename.xlsx'));
self::assertEquals('a:bfile', Html::winFileToUrl('a:bfile'));
}
diff --git a/tests/PhpSpreadsheetTests/Writer/Html/VisibilityTest.php b/tests/PhpSpreadsheetTests/Writer/Html/VisibilityTest.php
index 75987f83a7..04ec57720f 100644
--- a/tests/PhpSpreadsheetTests/Writer/Html/VisibilityTest.php
+++ b/tests/PhpSpreadsheetTests/Writer/Html/VisibilityTest.php
@@ -28,13 +28,13 @@ public function testVisibility1(): void
$sheet->getRowDimension(2)->setVisible(false);
$writer = new Html($spreadsheet);
$html = $writer->generateHTMLAll();
- $reg = '/^\\s*table[.]sheet0 tr { display:none; visibility:hidden }\\s*$/m';
+ $reg = '/^\s*table[.]sheet0 tr { display:none; visibility:hidden }\s*$/m';
$rowsrch = preg_match($reg, $html);
self::assertEquals($rowsrch, 0);
- $reg = '/^\\s*table[.]sheet0 tr[.]row1 { display:none; visibility:hidden }\\s*$/m';
+ $reg = '/^\s*table[.]sheet0 tr[.]row1 { display:none; visibility:hidden }\s*$/m';
$rowsrch = preg_match($reg, $html);
self::assertEquals($rowsrch, 1);
- $reg = '/^\\s*table[.]sheet0 [.]column1 [{] display:none [}]\\s*$/m';
+ $reg = '/^\s*table[.]sheet0 [.]column1 [{] display:none [}]\s*$/m';
$colsrch = preg_match($reg, $html);
self::assertEquals($colsrch, 1);
@@ -61,13 +61,13 @@ public function testVisibility2(): void
$writer = new Html($spreadsheet);
$html = $writer->generateHTMLAll();
- $reg = '/^\\s*table[.]sheet0 tr { height:15pt; display:none; visibility:hidden }\\s*$/m';
+ $reg = '/^\s*table[.]sheet0 tr { height:15pt; display:none; visibility:hidden }\s*$/m';
$rowsrch = preg_match($reg, $html);
self::assertEquals($rowsrch, 1);
- $reg = '/^\\s*table[.]sheet0 tr[.]row1 { display:none; visibility:hidden }\\s*$/m';
+ $reg = '/^\s*table[.]sheet0 tr[.]row1 { display:none; visibility:hidden }\s*$/m';
$rowsrch = preg_match($reg, $html);
self::assertEquals($rowsrch, 0);
- $reg = '/^\\s*table[.]sheet0 [.]column1 [{] display:none [}]\\s*$/m';
+ $reg = '/^\s*table[.]sheet0 [.]column1 [{] display:none [}]\s*$/m';
$colsrch = preg_match($reg, $html);
self::assertEquals($colsrch, 1);
@@ -97,15 +97,15 @@ public function testDefaultRowHeight(): void
$html = $writer->generateHTMLAll();
self::assertEquals(1, substr_count($html, 'height:20pt'));
self::assertEquals(1, substr_count($html, 'height:25pt'));
- $rowsrch = preg_match('/^\\s*table[.]sheet0 tr [{] height:20pt [}]\\s*$/m', $html);
+ $rowsrch = preg_match('/^\s*table[.]sheet0 tr [{] height:20pt [}]\s*$/m', $html);
self::assertEquals(1, $rowsrch);
- $rowsrch = preg_match('/^\\s*table[.]sheet0 tr[.]row1 [{] height:25pt [}]\\s*$/m', $html);
+ $rowsrch = preg_match('/^\s*table[.]sheet0 tr[.]row1 [{] height:25pt [}]\s*$/m', $html);
self::assertEquals(1, $rowsrch);
- $rowsrch = preg_match('/^\\s*td[.]style1, th[.]style1 [{].*text-decoration:line-through;.*[}]\\s*$/m', $html);
+ $rowsrch = preg_match('/^\s*td[.]style1, th[.]style1 [{].*text-decoration:line-through;.*[}]\s*$/m', $html);
self::assertEquals(1, $rowsrch);
- $rowsrch = preg_match('/^\\s*td[.]style2, th[.]style2 [{].*text-decoration:underline line-through;.*[}]\\s*$/m', $html);
+ $rowsrch = preg_match('/^\s*td[.]style2, th[.]style2 [{].*text-decoration:underline line-through;.*[}]\s*$/m', $html);
self::assertEquals(1, $rowsrch);
- $rowsrch = preg_match('/^\\s*td[.]style3, th[.]style3 [{].*text-decoration:underline;.*[}]\\s*$/m', $html);
+ $rowsrch = preg_match('/^\s*td[.]style3, th[.]style3 [{].*text-decoration:underline;.*[}]\s*$/m', $html);
self::assertEquals(1, $rowsrch);
$this->writeAndReload($spreadsheet, 'Html');
diff --git a/tests/PhpSpreadsheetTests/Writer/Html/XssVulnerabilityTest.php b/tests/PhpSpreadsheetTests/Writer/Html/XssVulnerabilityTest.php
index 324f1d073c..55d7a33662 100644
--- a/tests/PhpSpreadsheetTests/Writer/Html/XssVulnerabilityTest.php
+++ b/tests/PhpSpreadsheetTests/Writer/Html/XssVulnerabilityTest.php
@@ -20,7 +20,7 @@ public static function providerXssRichText(): array
'script tag with quotes' => ['Hello, I am trying to your site', 'Hello, I am trying to <script>alert("Hack");</script> your site'],
'javascript tag no hex' => ["CLICK", "<a href='javascript:alert(1)'>CLICK</a>"],
'javascript tag' => ["CLICK", "<a href=' javascript:alert(1)'>CLICK</a>"],
- 'with unicode' => ['CLICK', '<a href="\\u0001java\\u0003script:alert(1)">CLICK</a>'],
+ 'with unicode' => ['CLICK', '<a href="\u0001java\u0003script:alert(1)">CLICK</a>'],
'inline css' => ['