From a746ac8793e08f9facc5416109f3fefc7eb3d3bf Mon Sep 17 00:00:00 2001 From: Milwad <98118400+milwad-dev@users.noreply.github.com> Date: Thu, 13 Feb 2025 23:16:50 +0330 Subject: [PATCH 1/7] Update valid-even-number.md --- docs/1.x/valid-even-number.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/1.x/valid-even-number.md b/docs/1.x/valid-even-number.md index 7b60c9f3..2c34a738 100644 --- a/docs/1.x/valid-even-number.md +++ b/docs/1.x/valid-even-number.md @@ -9,3 +9,5 @@ return [ 'number' => ['required', new ValidEvenNumber()], // number => 1024 ]; ``` + +> Consider installing the `gmp` extension to significantly enhance performance when working with large numbers. It can greatly optimize your calculations and improve efficiency. From 5a90308900155544cee4620d8bef2f0e8a7ea8df Mon Sep 17 00:00:00 2001 From: Milwad <98118400+milwad-dev@users.noreply.github.com> Date: Thu, 13 Feb 2025 23:16:57 +0330 Subject: [PATCH 2/7] Update valid-odd-number.md --- docs/1.x/valid-odd-number.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/1.x/valid-odd-number.md b/docs/1.x/valid-odd-number.md index b628aa2a..a1eb9540 100644 --- a/docs/1.x/valid-odd-number.md +++ b/docs/1.x/valid-odd-number.md @@ -9,3 +9,5 @@ return [ 'number' => ['required', new ValidOddNumber()], // number => 4321 ]; ``` + +> Consider installing the `gmp` extension to significantly enhance performance when working with large numbers. It can greatly optimize your calculations and improve efficiency. From 75458f0fff2e7121e64ba391f8e8969855c3bf7a Mon Sep 17 00:00:00 2001 From: Milwad <98118400+milwad-dev@users.noreply.github.com> Date: Thu, 13 Feb 2025 23:43:26 +0330 Subject: [PATCH 3/7] Update ValidEvenNumber.php --- src/Rules/ValidEvenNumber.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Rules/ValidEvenNumber.php b/src/Rules/ValidEvenNumber.php index b1dffccb..4154bf0b 100644 --- a/src/Rules/ValidEvenNumber.php +++ b/src/Rules/ValidEvenNumber.php @@ -18,6 +18,7 @@ public function passes($attribute, $value): bool $number = strval($value); $number = explode('.', $number); + // Check if there is a decimal part and it's not zero if (isset($number[1]) && $number[1] != 0) { return false; } From 7e7d74090e00df06ca9d6ee4e659e16b71d5ec71 Mon Sep 17 00:00:00 2001 From: Milwad <98118400+milwad-dev@users.noreply.github.com> Date: Thu, 13 Feb 2025 23:43:39 +0330 Subject: [PATCH 4/7] Update ValidOddNumber.php --- src/Rules/ValidOddNumber.php | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/Rules/ValidOddNumber.php b/src/Rules/ValidOddNumber.php index 48e0a283..8a38d3e6 100644 --- a/src/Rules/ValidOddNumber.php +++ b/src/Rules/ValidOddNumber.php @@ -11,7 +11,24 @@ class ValidOddNumber implements Rule */ public function passes($attribute, $value): bool { - return preg_match('/^\d*[13579]$/', $value); + if (! is_numeric($value)) { + return false; + } + + $number = strval($value); + $number = explode('.', $number); + + // Check if there is a decimal part and it's not zero + if (isset($number[1]) && $number[1] != 0) { + return false; + } + + $number = $number[0]; + + if (extension_loaded('gmp')) { + return gmp_cmp(gmp_mod($number, '2'), '0') !== 0; + } + return $number % 2 !== 0; } /** From 66b16e64e8ba33015ec3b6e33520329ea6436e2b Mon Sep 17 00:00:00 2001 From: Milwad <98118400+milwad-dev@users.noreply.github.com> Date: Thu, 13 Feb 2025 23:43:42 +0330 Subject: [PATCH 5/7] Update ValidOddNumberTest.php --- tests/Rules/ValidOddNumberTest.php | 48 ++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/Rules/ValidOddNumberTest.php b/tests/Rules/ValidOddNumberTest.php index 74697a8c..ab019a08 100644 --- a/tests/Rules/ValidOddNumberTest.php +++ b/tests/Rules/ValidOddNumberTest.php @@ -30,4 +30,52 @@ public function test_number_is_not_odd() $this->assertFalse($passes); } + + /** + * Test float number is odd. + * + * @test + * + * @return void + */ + public function check_float_number_is_odd() + { + $rules = ['odd_number' => [new ValidOddNumber]]; + $data = ['odd_number' => '753.00']; + $passes = $this->app['validator']->make($data, $rules)->passes(); + + $this->assertTrue($passes); + } + + /** + * Test float number is not odd. + * + * @test + * + * @return void + */ + public function check_float_number_is_not_odd() + { + $rules = ['odd_number' => [new ValidOddNumber]]; + $data = ['odd_number' => '333.14']; + $passes = $this->app['validator']->make($data, $rules)->passes(); + + $this->assertFalse($passes); + } + + /** + * Test non-numeric values. + * + * @test + * + * @return void + */ + public function check_non_numeric_values() + { + $rules = ['odd_number' => [new ValidOddNumber]]; + $data = ['odd_number' => 'abc']; + $passes = $this->app['validator']->make($data, $rules)->passes(); + + $this->assertFalse($passes); + } } From e68119f8b3b17a4f3f852a04f696cb88833e8c18 Mon Sep 17 00:00:00 2001 From: milwad-dev <98118400+milwad-dev@users.noreply.github.com> Date: Thu, 13 Feb 2025 20:14:18 +0000 Subject: [PATCH 6/7] Fix styling --- src/Rules/ValidOddNumber.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Rules/ValidOddNumber.php b/src/Rules/ValidOddNumber.php index 8a38d3e6..afd2231c 100644 --- a/src/Rules/ValidOddNumber.php +++ b/src/Rules/ValidOddNumber.php @@ -28,6 +28,7 @@ public function passes($attribute, $value): bool if (extension_loaded('gmp')) { return gmp_cmp(gmp_mod($number, '2'), '0') !== 0; } + return $number % 2 !== 0; } From 77d2e1dee1a0a77970eee68ef9cf9eb384d6fd13 Mon Sep 17 00:00:00 2001 From: Milwad <98118400+milwad-dev@users.noreply.github.com> Date: Thu, 13 Feb 2025 23:45:40 +0330 Subject: [PATCH 7/7] Update ValidOddNumberTest.php --- tests/Rules/ValidOddNumberTest.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/Rules/ValidOddNumberTest.php b/tests/Rules/ValidOddNumberTest.php index ab019a08..e785e8cc 100644 --- a/tests/Rules/ValidOddNumberTest.php +++ b/tests/Rules/ValidOddNumberTest.php @@ -61,6 +61,12 @@ public function check_float_number_is_not_odd() $passes = $this->app['validator']->make($data, $rules)->passes(); $this->assertFalse($passes); + + $rules = ['odd_number' => [new ValidOddNumber]]; + $data = ['odd_number' => '322.00']; + $passes = $this->app['validator']->make($data, $rules)->passes(); + + $this->assertFalse($passes); } /**