diff --git a/src/Emails/Validator/Email.php b/src/Emails/Validator/Email.php index 4bffadc..7ee3ca1 100644 --- a/src/Emails/Validator/Email.php +++ b/src/Emails/Validator/Email.php @@ -12,6 +12,13 @@ */ class Email extends Validator { + protected bool $allowEmpty; + + public function __construct(bool $allowEmpty = false) + { + $this->allowEmpty = $allowEmpty; + } + /** * Get Description * @@ -35,6 +42,10 @@ public function isValid($value): bool return false; } + if ($this->allowEmpty && \strlen($value) === 0) { + return true; + } + try { $email = new EmailParser($value); diff --git a/tests/Validator/EmailTest.php b/tests/Validator/EmailTest.php index f88dfea..a234ef1 100644 --- a/tests/Validator/EmailTest.php +++ b/tests/Validator/EmailTest.php @@ -78,4 +78,29 @@ public function test_validator_is_array(): void $this->assertEquals(false, $validator->isArray()); } + + public function test_allow_empty_disabled(): void + { + $validator = new Email(false); + + $this->assertEquals(false, $validator->isValid('')); + $this->assertEquals(true, $validator->isValid('test@example.com')); + } + + public function test_allow_empty_enabled(): void + { + $validator = new Email(true); + + $this->assertEquals(true, $validator->isValid('')); + $this->assertEquals(true, $validator->isValid('test@example.com')); + $this->assertEquals(false, $validator->isValid('invalid-email')); + } + + public function test_allow_empty_default_behavior(): void + { + $validator = new Email; + + $this->assertEquals(false, $validator->isValid('')); + $this->assertEquals(true, $validator->isValid('test@example.com')); + } }