diff --git a/src/Illuminate/Validation/ValidationData.php b/src/Illuminate/Validation/ValidationData.php index 74f552597c1c..bd31055daab9 100644 --- a/src/Illuminate/Validation/ValidationData.php +++ b/src/Illuminate/Validation/ValidationData.php @@ -55,7 +55,7 @@ protected static function extractValuesForWildcards($masterData, $data, $attribu { $keys = []; - $pattern = str_replace('\*', '[^\.]+', preg_quote($attribute)); + $pattern = str_replace('\*', '[^\.]+', preg_quote($attribute, '/')); foreach ($data as $key => $value) { if ((bool) preg_match('/^'.$pattern.'/', $key, $matches)) { diff --git a/src/Illuminate/Validation/ValidationRuleParser.php b/src/Illuminate/Validation/ValidationRuleParser.php index 0c593e61e8b7..4cd0707fda27 100644 --- a/src/Illuminate/Validation/ValidationRuleParser.php +++ b/src/Illuminate/Validation/ValidationRuleParser.php @@ -124,7 +124,7 @@ protected function prepareRule($rule) */ protected function explodeWildcardRules($results, $attribute, $rules) { - $pattern = str_replace('\*', '[^\.]*', preg_quote($attribute)); + $pattern = str_replace('\*', '[^\.]*', preg_quote($attribute, '/')); $data = ValidationData::initializeAndGatherData($attribute, $this->data); diff --git a/tests/Validation/ValidationValidatorTest.php b/tests/Validation/ValidationValidatorTest.php index 7abf86bed271..762c8d5ab5ea 100755 --- a/tests/Validation/ValidationValidatorTest.php +++ b/tests/Validation/ValidationValidatorTest.php @@ -4005,6 +4005,17 @@ public function testValidateReturnsValidatedData() $this->assertEquals(['first' => 'john', 'preferred' => 'john'], $data); } + public function testValidationKeysWithSlashes() + { + $trans = $this->getIlluminateArrayTranslator(); + + $v = new Validator($trans, ['foo/' => 'bar'], ['foo/' => 'required']); + $this->assertTrue($v->passes()); + + $v = new Validator($trans, ['foo/' => ['bar']], ['foo/.*' => 'required']); + $this->assertTrue($v->passes()); + } + protected function getTranslator() { return m::mock('Illuminate\Contracts\Translation\Translator');