vendor/egulias/email-validator/src/Parser.php line 35

Open in your IDE?
  1. <?php
  2. namespace Egulias\EmailValidator;
  3. use Egulias\EmailValidator\Result\Result;
  4. use Egulias\EmailValidator\Result\ValidEmail;
  5. use Egulias\EmailValidator\Result\InvalidEmail;
  6. use Egulias\EmailValidator\Result\Reason\ExpectingATEXT;
  7. abstract class Parser
  8. {
  9.     /**
  10.      * @var Warning\Warning[]
  11.      */
  12.     protected $warnings = [];
  13.     /**
  14.      * @var EmailLexer
  15.      */
  16.     protected $lexer;
  17.     /**
  18.      * id-left "@" id-right
  19.      */
  20.     abstract protected function parseRightFromAt() : Result;
  21.     abstract protected function parseLeftFromAt() : Result;
  22.     abstract protected function preLeftParsing() : Result;
  23.     public function __construct(EmailLexer $lexer)
  24.     {
  25.         $this->lexer $lexer;   
  26.     }
  27.     public function parse(string $str) : Result
  28.     {
  29.         $this->lexer->setInput($str);
  30.         if ($this->lexer->hasInvalidTokens()) {
  31.             return new InvalidEmail(new ExpectingATEXT("Invalid tokens found"), $this->lexer->token["value"]);
  32.         }
  33.         $preParsingResult $this->preLeftParsing();
  34.         if ($preParsingResult->isInvalid()) {
  35.             return $preParsingResult;
  36.         }
  37.         $localPartResult $this->parseLeftFromAt();
  38.         if ($localPartResult->isInvalid()) {
  39.             return $localPartResult;
  40.         }
  41.         $domainPartResult $this->parseRightFromAt(); 
  42.         if ($domainPartResult->isInvalid()) {
  43.             return $domainPartResult;
  44.         }
  45.         return new ValidEmail();
  46.     }
  47.     /**
  48.      * @return Warning\Warning[]
  49.      */
  50.     public function getWarnings() : array
  51.     {
  52.         return $this->warnings;
  53.     }
  54.     protected function hasAtToken() : bool
  55.     {
  56.         $this->lexer->moveNext();
  57.         $this->lexer->moveNext();
  58.         return $this->lexer->token['type'] !== EmailLexer::S_AT;
  59.     }
  60. }