class LocalPart
Hierarchy
- class \Egulias\EmailValidator\Parser\PartParser
- class \Egulias\EmailValidator\Parser\LocalPart extends \Egulias\EmailValidator\Parser\PartParser
Expanded class hierarchy of LocalPart
1 file declares its use of LocalPart
- EmailParser.php in vendor/
egulias/ email-validator/ src/ EmailParser.php
File
-
vendor/
egulias/ email-validator/ src/ Parser/ LocalPart.php, line 16
Namespace
Egulias\EmailValidator\ParserView source
class LocalPart extends PartParser {
public const INVALID_TOKENS = [
EmailLexer::S_COMMA => EmailLexer::S_COMMA,
EmailLexer::S_CLOSEBRACKET => EmailLexer::S_CLOSEBRACKET,
EmailLexer::S_OPENBRACKET => EmailLexer::S_OPENBRACKET,
EmailLexer::S_GREATERTHAN => EmailLexer::S_GREATERTHAN,
EmailLexer::S_LOWERTHAN => EmailLexer::S_LOWERTHAN,
EmailLexer::S_COLON => EmailLexer::S_COLON,
EmailLexer::S_SEMICOLON => EmailLexer::S_SEMICOLON,
EmailLexer::INVALID => EmailLexer::INVALID,
];
/**
* @var string
*/
private $localPart = '';
public function parse() : Result {
$this->lexer
->startRecording();
while (!$this->lexer->current
->isA(EmailLexer::S_AT) && !$this->lexer->current
->isA(EmailLexer::S_EMPTY)) {
if ($this->hasDotAtStart()) {
return new InvalidEmail(new DotAtStart(), $this->lexer->current->value);
}
if ($this->lexer->current
->isA(EmailLexer::S_DQUOTE)) {
$dquoteParsingResult = $this->parseDoubleQuote();
//Invalid double quote parsing
if ($dquoteParsingResult->isInvalid()) {
return $dquoteParsingResult;
}
}
if ($this->lexer->current
->isA(EmailLexer::S_OPENPARENTHESIS) || $this->lexer->current
->isA(EmailLexer::S_CLOSEPARENTHESIS)) {
$commentsResult = $this->parseComments();
//Invalid comment parsing
if ($commentsResult->isInvalid()) {
return $commentsResult;
}
}
if ($this->lexer->current
->isA(EmailLexer::S_DOT) && $this->lexer
->isNextToken(EmailLexer::S_DOT)) {
return new InvalidEmail(new ConsecutiveDot(), $this->lexer->current->value);
}
if ($this->lexer->current
->isA(EmailLexer::S_DOT) && $this->lexer
->isNextToken(EmailLexer::S_AT)) {
return new InvalidEmail(new DotAtEnd(), $this->lexer->current->value);
}
$resultEscaping = $this->validateEscaping();
if ($resultEscaping->isInvalid()) {
return $resultEscaping;
}
$resultToken = $this->validateTokens(false);
if ($resultToken->isInvalid()) {
return $resultToken;
}
$resultFWS = $this->parseLocalFWS();
if ($resultFWS->isInvalid()) {
return $resultFWS;
}
$this->lexer
->moveNext();
}
$this->lexer
->stopRecording();
$this->localPart = rtrim($this->lexer
->getAccumulatedValues(), '@');
if (strlen($this->localPart) > LocalTooLong::LOCAL_PART_LENGTH) {
$this->warnings[LocalTooLong::CODE] = new LocalTooLong();
}
return new ValidEmail();
}
protected function validateTokens(bool $hasComments) : Result {
if (isset(self::INVALID_TOKENS[$this->lexer->current->type])) {
return new InvalidEmail(new ExpectingATEXT('Invalid token found'), $this->lexer->current->value);
}
return new ValidEmail();
}
public function localPart() : string {
return $this->localPart;
}
private function parseLocalFWS() : Result {
$foldingWS = new FoldingWhiteSpace($this->lexer);
$resultFWS = $foldingWS->parse();
if ($resultFWS->isValid()) {
$this->warnings = [
$this->warnings,
$foldingWS->getWarnings(),
];
}
return $resultFWS;
}
private function hasDotAtStart() : bool {
return $this->lexer->current
->isA(EmailLexer::S_DOT) && $this->lexer
->getPrevious()
->isA(EmailLexer::S_EMPTY);
}
private function parseDoubleQuote() : Result {
$dquoteParser = new DoubleQuote($this->lexer);
$parseAgain = $dquoteParser->parse();
$this->warnings = [
$this->warnings,
$dquoteParser->getWarnings(),
];
return $parseAgain;
}
protected function parseComments() : Result {
$commentParser = new Comment($this->lexer, new LocalComment());
$result = $commentParser->parse();
$this->warnings = [
$this->warnings,
$commentParser->getWarnings(),
];
return $result;
}
private function validateEscaping() : Result {
//Backslash found
if (!$this->lexer->current
->isA(EmailLexer::S_BACKSLASH)) {
return new ValidEmail();
}
if ($this->lexer
->isNextToken(EmailLexer::GENERIC)) {
return new InvalidEmail(new ExpectingATEXT('Found ATOM after escaping'), $this->lexer->current->value);
}
return new ValidEmail();
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
LocalPart::$localPart | private | property | |||
LocalPart::hasDotAtStart | private | function | |||
LocalPart::INVALID_TOKENS | public | constant | |||
LocalPart::localPart | public | function | |||
LocalPart::parse | public | function | Overrides PartParser::parse | ||
LocalPart::parseComments | protected | function | 1 | ||
LocalPart::parseDoubleQuote | private | function | |||
LocalPart::parseLocalFWS | private | function | |||
LocalPart::validateEscaping | private | function | |||
LocalPart::validateTokens | protected | function | |||
PartParser::$lexer | protected | property | |||
PartParser::$warnings | protected | property | |||
PartParser::checkConsecutiveDots | protected | function | |||
PartParser::escaped | protected | function | |||
PartParser::getWarnings | public | function | |||
PartParser::parseFWS | protected | function | |||
PartParser::__construct | public | function | 1 |