Skip to content

Commit 751e0bf

Browse files
authored
Merge pull request #8 from arifszn/feat/add-rule-DivisibleBy
feat: add rule divisible by
2 parents 395a6cf + 6a27295 commit 751e0bf

File tree

15 files changed

+158
-33
lines changed

15 files changed

+158
-33
lines changed

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ public function rules()
4949
- [`Btc Address`](#btcaddress)
5050
- [`Credit Card`](#creditcard)
5151
- [`Data URI`](#datauri)
52+
- [`Divisible By`](#divisibleby)
5253
- [`Float Number`](#floatnumber)
5354
- [`Image URL`](#imageurl)
5455
- [`Phone`](#phone)
@@ -160,6 +161,21 @@ public function rules()
160161
}
161162
```
162163

164+
### `DivisibleBy`
165+
166+
The field under validation must be divisible by the given number.
167+
168+
```php
169+
use Arifszn\AdvancedValidation\Rules\DivisibleBy;
170+
171+
public function rules()
172+
{
173+
return [
174+
'foo' => [new DivisibleBy(2)],
175+
];
176+
}
177+
```
178+
163179
### `FloatNumber`
164180

165181
The field under validation must be a float number.

resources/lang/en/validation.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
'btc_address' => 'The :attribute must be a valid BTC address.',
1010
'credit_card' => 'The :attribute must be a valid credit card number.',
1111
'data_uri' => 'The :attribute must have data uri format.',
12+
'divisible_by' => 'The :attribute must be divisible by :number.',
1213
'float_number' => 'The :attribute must be a float number',
1314
'image_url' => 'The :attribute must be a valid image URL.',
1415
'phone' => 'The :attribute must be a valid phone number.',

src/Rules/Ascii.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ class Ascii implements Rule
1919
/**
2020
* Create a new rule instance.
2121
*
22-
* @param string $errorMessage Custom error message.
22+
* @param string|null $errorMessage Custom error message.
2323
* @return void
2424
*/
2525
public function __construct(string $errorMessage = null)
2626
{
27-
$this->errorMessage = $errorMessage ? $errorMessage : trans('advancedValidation::validation.ascii');
27+
$this->errorMessage = $errorMessage;
2828
}
2929

3030
/**
@@ -46,6 +46,6 @@ public function passes($attribute, $value)
4646
*/
4747
public function message()
4848
{
49-
return $this->errorMessage;
49+
return $this->errorMessage ? $this->errorMessage : trans('advancedValidation::validation.ascii');
5050
}
5151
}

src/Rules/BIC.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ class BIC implements Rule
2020
/**
2121
* Create a new rule instance.
2222
*
23-
* @param string $errorMessage Custom error message.
23+
* @param string|null $errorMessage Custom error message.
2424
* @return void
2525
*/
2626
public function __construct(string $errorMessage = null)
2727
{
28-
$this->errorMessage = $errorMessage ? $errorMessage : trans('advancedValidation::validation.bic');
28+
$this->errorMessage = $errorMessage;
2929
}
3030

3131
/**
@@ -48,6 +48,6 @@ public function passes($attribute, $value)
4848
*/
4949
public function message()
5050
{
51-
return $this->errorMessage;
51+
return $this->errorMessage ? $this->errorMessage : trans('advancedValidation::validation.bic');
5252
}
5353
}

src/Rules/Base64Image.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ class Base64Image implements Rule
2121
/**
2222
* Create a new rule instance.
2323
*
24-
* @param string $errorMessage Custom error message.
24+
* @param string|null $errorMessage Custom error message.
2525
* @return void
2626
*/
2727
public function __construct(string $errorMessage = null)
2828
{
29-
$this->errorMessage = $errorMessage ? $errorMessage : trans('advancedValidation::validation.base64_image');
29+
$this->errorMessage = $errorMessage;
3030
}
3131

3232
/**
@@ -65,6 +65,6 @@ public function passes($attribute, $value)
6565
*/
6666
public function message()
6767
{
68-
return $this->errorMessage;
68+
return $this->errorMessage ? $this->errorMessage : trans('advancedValidation::validation.base64_image');
6969
}
7070
}

src/Rules/Base64String.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ class Base64String implements Rule
1919
/**
2020
* Create a new rule instance.
2121
*
22-
* @param string $errorMessage Custom error message.
22+
* @param string|null $errorMessage Custom error message.
2323
* @return void
2424
*/
2525
public function __construct(string $errorMessage = null)
2626
{
27-
$this->errorMessage = $errorMessage ? $errorMessage : trans('advancedValidation::validation.base64_string');
27+
$this->errorMessage = $errorMessage;
2828
}
2929

3030
/**
@@ -46,6 +46,6 @@ public function passes($attribute, $value)
4646
*/
4747
public function message()
4848
{
49-
return $this->errorMessage;
49+
return $this->errorMessage ? $this->errorMessage : trans('advancedValidation::validation.base64_string');
5050
}
5151
}

src/Rules/BtcAddress.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ class BtcAddress implements Rule
1919
/**
2020
* Create a new rule instance.
2121
*
22-
* @param string $errorMessage Custom error message.
22+
* @param string|null $errorMessage Custom error message.
2323
* @return void
2424
*/
2525
public function __construct(string $errorMessage = null)
2626
{
27-
$this->errorMessage = $errorMessage ? $errorMessage : trans('advancedValidation::validation.btc_address');
27+
$this->errorMessage = $errorMessage;
2828
}
2929

3030
/**
@@ -53,6 +53,6 @@ public function passes($attribute, $value)
5353
*/
5454
public function message()
5555
{
56-
return $this->errorMessage;
56+
return $this->errorMessage ? $this->errorMessage : trans('advancedValidation::validation.btc_address');
5757
}
5858
}

src/Rules/CreditCard.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ class CreditCard implements Rule
1919
/**
2020
* Create a new rule instance.
2121
*
22-
* @param string $errorMessage Custom error message.
22+
* @param string|null $errorMessage Custom error message.
2323
* @return void
2424
*/
2525
public function __construct(string $errorMessage = null)
2626
{
27-
$this->errorMessage = $errorMessage ? $errorMessage : trans('advancedValidation::validation.credit_card');
27+
$this->errorMessage = $errorMessage;
2828
}
2929

3030
/**
@@ -55,7 +55,7 @@ public function passes($attribute, $value)
5555
$tmpNum *= 2;
5656

5757
if ($tmpNum >= 10) {
58-
$sum += (($tmpNum % 10) + 1);
58+
$sum += (fmod($tmpNum, 10) + 1);
5959
} else {
6060
$sum += $tmpNum;
6161
}
@@ -66,7 +66,7 @@ public function passes($attribute, $value)
6666
$shouldDouble = !$shouldDouble;
6767
}
6868

69-
return !!(($sum % 10) === 0 ? true : false);
69+
return !!(fmod($sum, 10) === 0.0 ? true : false);
7070
}
7171

7272
/**
@@ -76,6 +76,6 @@ public function passes($attribute, $value)
7676
*/
7777
public function message()
7878
{
79-
return $this->errorMessage;
79+
return $this->errorMessage ? $this->errorMessage : trans('advancedValidation::validation.credit_card');
8080
}
8181
}

src/Rules/DataURI.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ class DataURI implements Rule
1919
/**
2020
* Create a new rule instance.
2121
*
22-
* @param string $errorMessage Custom error message.
22+
* @param string|null $errorMessage Custom error message.
2323
* @return void
2424
*/
2525
public function __construct(string $errorMessage = null)
2626
{
27-
$this->errorMessage = $errorMessage ? $errorMessage : trans('advancedValidation::validation.data_uri');
27+
$this->errorMessage = $errorMessage;
2828
}
2929

3030
/**
@@ -87,6 +87,6 @@ public function passes($attribute, $value)
8787
*/
8888
public function message()
8989
{
90-
return $this->errorMessage;
90+
return $this->errorMessage ? $this->errorMessage : trans('advancedValidation::validation.data_uri');
9191
}
9292
}

src/Rules/DivisibleBy.php

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php
2+
3+
namespace Arifszn\AdvancedValidation\Rules;
4+
5+
use Illuminate\Contracts\Validation\Rule;
6+
use Illuminate\Support\Facades\Validator;
7+
8+
/**
9+
* The field under validation must be divisible by the given number.
10+
*
11+
* @package Arifszn\AdvancedValidation\Rules
12+
*/
13+
class DivisibleBy implements Rule
14+
{
15+
/**
16+
* @var string
17+
*/
18+
private $errorMessage;
19+
20+
/**
21+
* @var int
22+
*/
23+
private $number;
24+
25+
/**
26+
* @var string
27+
*/
28+
private $attribute;
29+
30+
/**
31+
* Create a new rule instance.
32+
*
33+
* @param int $number Divisible by number.
34+
* @param string|null $errorMessage Custom error message.
35+
* @return void
36+
*/
37+
public function __construct(int $number, string $errorMessage = null)
38+
{
39+
$this->number = $number;
40+
$this->errorMessage = $errorMessage;
41+
}
42+
43+
/**
44+
* Determine if the validation rule passes.
45+
*
46+
* @param string $attribute
47+
* @param mixed $value
48+
* @return bool
49+
*/
50+
public function passes($attribute, $value)
51+
{
52+
$this->attribute = $attribute;
53+
54+
$floatValidation = Validator::make(
55+
['float' => $value],
56+
['float' => ['required', new FloatNumber()]],
57+
);
58+
59+
return !$floatValidation->fails() && (fmod(floatval($value), intval($this->number, 10)) === 0.0);
60+
}
61+
62+
/**
63+
* Get the validation error message.
64+
*
65+
* @return string
66+
*/
67+
public function message()
68+
{
69+
return $this->errorMessage ? $this->errorMessage : trans('advancedValidation::validation.divisible_by', [
70+
'attribute' => $this->attribute,
71+
'number' => $this->number
72+
]);
73+
}
74+
}

0 commit comments

Comments
 (0)