Browse Source

Allow character classes in attribute patterns.

Fixes #3706
mark_story 13 years ago
parent
commit
246c09ae40
2 changed files with 5 additions and 1 deletions
  1. 4 0
      lib/Cake/Test/Case/Utility/HashTest.php
  2. 1 1
      lib/Cake/Utility/Hash.php

+ 4 - 0
lib/Cake/Test/Case/Utility/HashTest.php

@@ -873,6 +873,10 @@ class HashTest extends CakeTestCase {
 		$result = Hash::extract($data, '{n}.Article[title=/^First/]');
 		$expected = array($data[0]['Article']);
 		$this->assertEquals($expected, $result);
+
+		$result = Hash::extract($data, '{n}.Article[title=/^Fir[a-z]+/]');
+		$expected = array($data[0]['Article']);
+		$this->assertEquals($expected, $result);
 	}
 
 /**

+ 1 - 1
lib/Cake/Utility/Hash.php

@@ -170,7 +170,7 @@ class Hash {
  */
 	protected static function _matches(array $data, $selector) {
 		preg_match_all(
-			'/(\[ (?<attr>[^=><!]+?) (\s* (?<op>[><!]?[=]|[><]) \s* (?<val>[^\]]+) )? \])/x',
+			'/(\[ (?<attr>[^=><!]+?) (\s* (?<op>[><!]?[=]|[><]) \s* (?<val>(?:\/.*?\/ | [^\]]+)) )? \])/x',
 			$selector,
 			$conditions,
 			PREG_SET_ORDER