sonarrradarrplexorganizrnginxdashboardhtpcserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelanding
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							104 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							104 lines
						
					
					
						
							2.6 KiB
						
					
					
				| <?php | |
| 
 | |
| namespace Egulias\EmailValidator; | |
| 
 | |
| use Egulias\EmailValidator\Exception\ExpectingATEXT; | |
| use Egulias\EmailValidator\Exception\NoLocalPart; | |
| use Egulias\EmailValidator\Parser\DomainPart; | |
| use Egulias\EmailValidator\Parser\LocalPart; | |
| use Egulias\EmailValidator\Warning\EmailTooLong; | |
| 
 | |
| /** | |
|  * EmailParser | |
|  * | |
|  * @author Eduardo Gulias Davis <me@egulias.com> | |
|  */ | |
| class EmailParser | |
| { | |
|     const EMAIL_MAX_LENGTH = 254; | |
| 
 | |
|     protected $warnings; | |
|     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); | |
|         $this->warnings = new \SplObjectStorage(); | |
|     } | |
| 
 | |
|     /** | |
|      * @param $str | |
|      * @return array | |
|      */ | |
|     public function parse($str) | |
|     { | |
|         $this->lexer->setInput($str); | |
| 
 | |
|         if (!$this->hasAtToken()) { | |
|             throw new NoLocalPart(); | |
|         } | |
| 
 | |
| 
 | |
|         $this->localPartParser->parse($str); | |
|         $this->domainPartParser->parse($str); | |
| 
 | |
|         $this->setParts($str); | |
| 
 | |
|         if ($this->lexer->hasInvalidTokens()) { | |
|             throw new ExpectingATEXT(); | |
|         } | |
| 
 | |
|         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; | |
|     } | |
| 
 | |
|     /** | |
|      * @param string $localPart | |
|      * @param string $parsedDomainPart | |
|      */ | |
|     protected function addLongEmailWarning($localPart, $parsedDomainPart) | |
|     { | |
|         if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) { | |
|             $this->warnings[EmailTooLong::CODE] = new EmailTooLong(); | |
|         } | |
|     } | |
| }
 | |
| 
 |