Skip to content

Commit 0a635f2

Browse files
authored
Merge pull request #38 from vangelis183/eu-vat-id
[1.x] Add European `VAT ID` Rule
2 parents ff3b185 + ba84637 commit 0a635f2

File tree

3 files changed

+99
-0
lines changed

3 files changed

+99
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ return [
9999
| 33 | ValidPascalCase | Validate pascal case for ex (MilwadDev) |
100100
| 34 | ValidKebabCase | Validate kebab case for ex (milwad-dev) |
101101
| 35 | ValidSnakeCase | Validate snake case for ex (milwad_dev) |
102+
| 36 | ValidVatId | Validate european VAT ID ex (EL123456789123) |
102103

103104
# Rules
104105

src/Rules/ValidVatId.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace Milwad\LaravelValidate\Rules;
4+
5+
use Illuminate\Contracts\Validation\Rule;
6+
7+
class ValidVatId implements Rule
8+
{
9+
/**
10+
* Check VAT ID for validity.
11+
*
12+
* @param string $attribute
13+
* @param mixed $value
14+
* @return bool
15+
*/
16+
public function passes($attribute, $value)
17+
{
18+
// Remove all characters except letters and numbers
19+
$value = preg_replace('/[^a-zA-Z0-9]]/', '', $value);
20+
21+
return preg_match('/[a-zA-Z]{2}[0-9]{0,12}$/', $value);
22+
}
23+
24+
/**
25+
* Get the validation error message.
26+
*
27+
* @return string
28+
*/
29+
public function message()
30+
{
31+
return __('validate.vat-id');
32+
}
33+
}

tests/Rules/ValidVatIdTest.php

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
3+
namespace Milwad\LaravelValidate\Tests\Rules;
4+
5+
use Milwad\LaravelValidate\Rules\ValidVatId;
6+
use Milwad\LaravelValidate\Tests\BaseTest;
7+
8+
class ValidVatIdTest extends BaseTest
9+
{
10+
/**
11+
* Set up.
12+
*/
13+
protected function setUp(): void
14+
{
15+
parent::setUp();
16+
}
17+
18+
/**
19+
* Test vatid is valid.
20+
*
21+
* @test
22+
*
23+
* @return void
24+
*/
25+
public function vatid_is_valid()
26+
{
27+
$rules = ['vat_id' => [new ValidVatId()]];
28+
$data = ['vat_id' => 'EL123456789'];
29+
$passes = $this->app['validator']->make($data, $rules)->passes();
30+
31+
$this->assertTrue($passes);
32+
}
33+
34+
/**
35+
* Test vatid is not valid.
36+
*
37+
* @test
38+
*
39+
* @return void
40+
*/
41+
public function vatid_is_not_valid()
42+
{
43+
$rules = ['vat_id' => [new ValidVatId()]];
44+
$data = ['vat_id' => 'EL123456789123678912'];
45+
$passes = $this->app['validator']->make($data, $rules)->passes();
46+
47+
$this->assertFalse($passes);
48+
}
49+
50+
/**
51+
* Test vatid is not valid (too long).
52+
*
53+
* @test
54+
*
55+
* @return void
56+
*/
57+
public function vat_is_to_long_valid()
58+
{
59+
$rules = ['vat_id' => [new ValidVatId()]];
60+
$data = ['vat_id' => 'EL1234567891236789123'];
61+
$passes = $this->app['validator']->make($data, $rules)->passes();
62+
63+
$this->assertFalse($passes);
64+
}
65+
}

0 commit comments

Comments
 (0)