File tree Expand file tree Collapse file tree 2 files changed +46
-1
lines changed Expand file tree Collapse file tree 2 files changed +46
-1
lines changed Original file line number Diff line number Diff line change @@ -11,7 +11,20 @@ class ValidEvenNumber implements Rule
1111 */
1212 public function passes ($ attribute , $ value ): bool
1313 {
14- return preg_match ('/^\d*[02468]$/ ' , $ value );
14+ $ number = strval ($ value );
15+ $ number = explode ('. ' , $ number );
16+
17+ if (isset ($ number [1 ]) && $ number [1 ] != 0 ) {
18+ return false ;
19+ }
20+
21+ $ number = $ number [0 ];
22+
23+ if (extension_loaded ('gmp ' )) {
24+ return gmp_cmp (gmp_mod ($ number , '2 ' ), '0 ' ) === 0 ;
25+ }
26+
27+ return $ number % 2 === 0 ;
1528 }
1629
1730 /**
Original file line number Diff line number Diff line change @@ -30,4 +30,36 @@ public function test_check_number_is_not_even()
3030
3131 $ this ->assertFalse ($ passes );
3232 }
33+
34+ /**
35+ * Test float number is even.
36+ *
37+ * @test
38+ *
39+ * @return void
40+ */
41+ public function check_float_number_is_even ()
42+ {
43+ $ rules = ['even_number ' => [new ValidEvenNumber ]];
44+ $ data = ['even_number ' => '754.00 ' ];
45+ $ passes = $ this ->app ['validator ' ]->make ($ data , $ rules )->passes ();
46+
47+ $ this ->assertTrue ($ passes );
48+ }
49+
50+ /**
51+ * Test float number is not even.
52+ *
53+ * @test
54+ *
55+ * @return void
56+ */
57+ public function check_float_number_is_not_even ()
58+ {
59+ $ rules = ['even_number ' => [new ValidEvenNumber ]];
60+ $ data = ['even_number ' => '333.13 ' ];
61+ $ passes = $ this ->app ['validator ' ]->make ($ data , $ rules )->passes ();
62+
63+ $ this ->assertFalse ($ passes );
64+ }
3365}
You can’t perform that action at this time.
0 commit comments