EmailParser.php in Zircon Profile 8
File
vendor/egulias/email-validator/src/Egulias/EmailValidator/EmailParser.php
View source
<?php
namespace Egulias\EmailValidator;
use Egulias\EmailValidator\Parser\DomainPart;
use Egulias\EmailValidator\Parser\LocalPart;
class EmailParser {
const EMAIL_MAX_LENGTH = 254;
protected $warnings = array();
protected $domainPart = '';
protected $localPart = '';
protected $lexer;
protected $localPartParser;
protected $domainPartParser;
public function __construct(EmailLexer $lexer) {
$this->lexer = $lexer;
$this->localPartParser = new LocalPart($this->lexer);
$this->domainPartParser = new DomainPart($this->lexer);
}
public function parse($str) {
$this->lexer
->setInput($str);
if (!$this
->hasAtToken()) {
throw new \InvalidArgumentException('ERR_NOLOCALPART');
}
$this->localPartParser
->parse($str);
$this->domainPartParser
->parse($str);
$this
->setParts($str);
if ($this->lexer
->hasInvalidTokens()) {
throw new \InvalidArgumentException('ERR_INVALID_ATEXT');
}
return array(
'local' => $this->localPart,
'domain' => $this->domainPart,
);
}
public function getWarnings() {
$localPartWarnings = $this->localPartParser
->getWarnings();
$domainPartWarnings = $this->domainPartParser
->getWarnings();
$this->warnings = array_merge($localPartWarnings, $domainPartWarnings);
$this
->addLongEmailWarning($this->localPart, $this->domainPart);
return $this->warnings;
}
public function getParsedDomainPart() {
return $this->domainPart;
}
protected function setParts($email) {
$parts = explode('@', $email);
$this->domainPart = $this->domainPartParser
->getDomainPart();
$this->localPart = $parts[0];
}
protected function hasAtToken() {
$this->lexer
->moveNext();
$this->lexer
->moveNext();
if ($this->lexer->token['type'] === EmailLexer::S_AT) {
return false;
}
return true;
}
protected function addLongEmailWarning($localPart, $parsedDomainPart) {
if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) {
$this->warnings[] = EmailValidator::RFC5322_TOOLONG;
}
}
}