From 03a062e9e4d7fabadac8a6ad0905cee77b01ef76 Mon Sep 17 00:00:00 2001 From: Eduardo Gulias Davis Date: Sat, 20 Feb 2021 17:46:52 +0100 Subject: [PATCH] Improve domain valid tokens --- src/Parser/DomainPart.php | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/Parser/DomainPart.php b/src/Parser/DomainPart.php index ba6deda..99239b6 100644 --- a/src/Parser/DomainPart.php +++ b/src/Parser/DomainPart.php @@ -247,17 +247,6 @@ class DomainPart extends Parser */ protected function checkDomainPartExceptions(array $prev, bool $hasComments) : Result { - $validDomainTokens = array( - EmailLexer::GENERIC => true, - EmailLexer::S_HYPHEN => true, - EmailLexer::S_DOT => true, - ); - - if ($hasComments) { - $validDomainTokens[EmailLexer::S_OPENPARENTHESIS] = true; - $validDomainTokens[EmailLexer::S_CLOSEPARENTHESIS] = true; - } - if ($this->lexer->token['type'] === EmailLexer::S_OPENBRACKET && $prev['type'] !== EmailLexer::S_AT) { return new InvalidEmail(new ExpectingATEXT('OPENBRACKET not after AT'), $this->lexer->token['value']); } @@ -271,6 +260,22 @@ class DomainPart extends Parser return new InvalidEmail(new ExpectingATEXT('Escaping following "ATOM"'), $this->lexer->token['value']); } + return $this->validateTokens($hasComments); + } + + private function validateTokens(bool $hasComments) : Result + { + $validDomainTokens = array( + EmailLexer::GENERIC => true, + EmailLexer::S_HYPHEN => true, + EmailLexer::S_DOT => true, + ); + + if ($hasComments) { + $validDomainTokens[EmailLexer::S_OPENPARENTHESIS] = true; + $validDomainTokens[EmailLexer::S_CLOSEPARENTHESIS] = true; + } + if (!isset($validDomainTokens[$this->lexer->token['type']])) { return new InvalidEmail(new ExpectingATEXT('Invalid token in domain: ' . $this->lexer->token['value']), $this->lexer->token['value']); }