diff --git a/core/modules/views/src/Plugin/views/HandlerBase.php b/core/modules/views/src/Plugin/views/HandlerBase.php index ef76b57369..70647eaf55 100644 --- a/core/modules/views/src/Plugin/views/HandlerBase.php +++ b/core/modules/views/src/Plugin/views/HandlerBase.php @@ -728,12 +728,12 @@ public static function breakString($str, $force_int = FALSE) { // Determine if the string has 'or' operators (plus signs) or 'and' // operators (commas) and split the string accordingly. - if (preg_match('/^([\w0-9-_\.]+[+ ]+)+[\w0-9-_\.]+$/u', $str)) { + if (preg_match('/^([\w0-9-_\.\#\&\/\(\)]+[+ ]+)+[\w0-9-_\.\#\&\/\(\)]+$/u', $str)) { // The '+' character in a query string may be parsed as ' '. $operator = 'or'; $value = preg_split('/[+ ]/', $str); } - elseif (preg_match('/^([\w0-9-_\.]+[, ]+)*[\w0-9-_\.]+$/u', $str)) { + elseif (preg_match('/^([\w0-9-_\.\#\&\/\(\)]+[, ]+)*[\w0-9-_\.\#\&\/\(\)]+$/u', $str)) { $operator = 'and'; $value = explode(',', $str); } diff --git a/core/modules/views/tests/src/Functional/Handler/HandlerTest.php b/core/modules/views/tests/src/Functional/Handler/HandlerTest.php index 2a08ec2ecf..4a6c4efe9a 100644 --- a/core/modules/views/tests/src/Functional/Handler/HandlerTest.php +++ b/core/modules/views/tests/src/Functional/Handler/HandlerTest.php @@ -108,6 +108,21 @@ public function testBreakString() { $handler = HandlerBase::breakString('wõrd1,wõrd2,wõrd'); $this->assertEqualValue(['wõrd1', 'wõrd2', 'wõrd'], $handler); $this->assertEqual('and', $handler->operator); + $handler = HandlerBase::breakString('Law & Order,word,word'); + $this->assertEqualValue(['Law & Order', 'word', 'word'], $handler); + $this->assertEqual('and', $handler->operator); + $handler = HandlerBase::breakString('word,Law & Order,word'); + $this->assertEqualValue(['word','Law & Order', 'word'], $handler); + $this->assertEqual('and', $handler->operator); + $handler = HandlerBase::breakString('word,#Law&Order,word'); + $this->assertEqualValue(['word','#Law&Order', 'word'], $handler); + $this->assertEqual('and', $handler->operator); + $handler = HandlerBase::breakString('word,word,Law/Order'); + $this->assertEqualValue(['word','word', 'Law/Order'], $handler); + $this->assertEqual('and', $handler->operator); + $handler = HandlerBase::breakString('word,word,Law (O) rder'); + $this->assertEqualValue(['word','word', 'Law (O) Order'], $handler); + $this->assertEqual('and', $handler->operator); // Test a single word $handler = HandlerBase::breakString('word');