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
11
11
*/
12
12
public function passes ($ attribute , $ value ): bool
13
13
{
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 ;
15
28
}
16
29
17
30
/**
Original file line number Diff line number Diff line change @@ -30,4 +30,36 @@ public function test_check_number_is_not_even()
30
30
31
31
$ this ->assertFalse ($ passes );
32
32
}
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
+ }
33
65
}
You can’t perform that action at this time.
0 commit comments