Email.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. /*
  3. * Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
  4. * SPDX-License-Identifier: MIT
  5. */
  6. declare(strict_types=1);
  7. namespace Respect\Validation\Rules;
  8. use Egulias\EmailValidator\EmailValidator;
  9. use Egulias\EmailValidator\Validation\RFCValidation;
  10. use function class_exists;
  11. use function filter_var;
  12. use function is_string;
  13. use const FILTER_VALIDATE_EMAIL;
  14. /**
  15. * Validates an email address.
  16. *
  17. * @author Andrey Kolyshkin <a.kolyshkin@semrush.com>
  18. * @author Eduardo Gulias Davis <me@egulias.com>
  19. * @author Henrique Moody <henriquemoody@gmail.com>
  20. * @author Paul Karikari <paulkarikari1@gmail.com>
  21. */
  22. final class Email extends AbstractRule
  23. {
  24. /**
  25. * @var EmailValidator|null
  26. */
  27. private $validator;
  28. /**
  29. * Initializes the rule assigning the EmailValidator instance.
  30. *
  31. * If the EmailValidator instance is not defined, tries to create one.
  32. */
  33. public function __construct(?EmailValidator $validator = null)
  34. {
  35. $this->validator = $validator ?: $this->createEmailValidator();
  36. }
  37. /**
  38. * {@inheritDoc}
  39. */
  40. public function validate($input): bool
  41. {
  42. if (!is_string($input)) {
  43. return false;
  44. }
  45. if ($this->validator !== null) {
  46. return $this->validator->isValid($input, new RFCValidation());
  47. }
  48. return (bool) filter_var($input, FILTER_VALIDATE_EMAIL);
  49. }
  50. private function createEmailValidator(): ?EmailValidator
  51. {
  52. if (class_exists(EmailValidator::class)) {
  53. return new EmailValidator();
  54. }
  55. return null;
  56. }
  57. }