diff --git a/CHANGELOG.md b/CHANGELOG.md index 1442fae1d..300341d8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file. ### Changed - (Backport) MongodbQueueServiceProvider does not use the DB Facade anymore [#2149](https://github.com/jenssegers/laravel-mongodb/pull/2149) by [@curosmj](https://github.com/curosmj) +- Add escape regex chars to DB Presence Verifier [#1992](https://github.com/jenssegers/laravel-mongodb/pull/1992) by [@andrei-gafton-rtgt](https://github.com/andrei-gafton-rtgt). ## [3.7.1] - 2020-10-29 diff --git a/src/Jenssegers/Mongodb/Validation/DatabasePresenceVerifier.php b/src/Jenssegers/Mongodb/Validation/DatabasePresenceVerifier.php index a7d57a89b..8ed85fd7f 100644 --- a/src/Jenssegers/Mongodb/Validation/DatabasePresenceVerifier.php +++ b/src/Jenssegers/Mongodb/Validation/DatabasePresenceVerifier.php @@ -16,7 +16,7 @@ class DatabasePresenceVerifier extends \Illuminate\Validation\DatabasePresenceVe */ public function getCount($collection, $column, $value, $excludeId = null, $idColumn = null, array $extra = []) { - $query = $this->table($collection)->where($column, 'regex', "/$value/i"); + $query = $this->table($collection)->where($column, 'regex', "/" . preg_quote($value) . "/i"); if ($excludeId !== null && $excludeId != 'NULL') { $query->where($idColumn ?: 'id', '<>', $excludeId); diff --git a/tests/ValidationTest.php b/tests/ValidationTest.php index 638398866..aed2278ca 100644 --- a/tests/ValidationTest.php +++ b/tests/ValidationTest.php @@ -41,6 +41,26 @@ public function testUnique(): void ['name' => 'required|unique:users'] ); $this->assertFalse($validator->fails()); + + User::create(['name' => 'Johnny Cash', 'email' => 'johnny.cash+200@gmail.com']); + + $validator = Validator::make( + ['email' => 'johnny.cash+200@gmail.com'], + ['email' => 'required|unique:users'] + ); + $this->assertTrue($validator->fails()); + + $validator = Validator::make( + ['email' => 'johnny.cash+20@gmail.com'], + ['email' => 'required|unique:users'] + ); + $this->assertFalse($validator->fails()); + + $validator = Validator::make( + ['email' => 'johnny.cash+1@gmail.com'], + ['email' => 'required|unique:users'] + ); + $this->assertFalse($validator->fails()); } public function testExists(): void diff --git a/tests/models/User.php b/tests/models/User.php index 6dc32cbe6..72bce055e 100644 --- a/tests/models/User.php +++ b/tests/models/User.php @@ -13,6 +13,7 @@ * Class User * @property string $_id * @property string $name + * @property string $email * @property string $title * @property int $age * @property \Carbon\Carbon $birthday