mirror of
https://github.com/egulias/EmailValidator.git
synced 2026-08-30 03:59:20 +00:00
Improve domain validation
This commit is contained in:
+17
-3
@@ -14,6 +14,9 @@ class EmailLexer extends AbstractLexer
|
||||
const S_DOT = 46;
|
||||
const S_DQUOTE = 34;
|
||||
const S_SQUOTE = 39;
|
||||
const S_BACKTICK = 96;
|
||||
const S_OPENCURLYBRACES = 123;
|
||||
const S_CLOSECURLYBRACES = 125;
|
||||
const S_OPENPARENTHESIS = 49;
|
||||
const S_CLOSEPARENTHESIS = 261;
|
||||
const S_OPENBRACKET = 262;
|
||||
@@ -21,6 +24,11 @@ class EmailLexer extends AbstractLexer
|
||||
const S_HYPHEN = 264;
|
||||
const S_COLON = 265;
|
||||
const S_DOUBLECOLON = 266;
|
||||
const S_PIPE = 124;
|
||||
const S_TILDE = 126;
|
||||
const S_UNDERSCORE = 95;
|
||||
const S_PLUS = 43;
|
||||
const S_EQUAL = 61;
|
||||
const S_SP = 267;
|
||||
const S_HTAB = 268;
|
||||
const S_CR = 269;
|
||||
@@ -52,6 +60,8 @@ class EmailLexer extends AbstractLexer
|
||||
* @var array
|
||||
*/
|
||||
protected $charValue = array(
|
||||
'{' => self::S_OPENCURLYBRACES,
|
||||
'}' => self::S_CLOSECURLYBRACES,
|
||||
'(' => self::S_OPENPARENTHESIS,
|
||||
')' => self::S_CLOSEPARENTHESIS,
|
||||
'<' => self::S_LOWERTHAN,
|
||||
@@ -66,6 +76,7 @@ class EmailLexer extends AbstractLexer
|
||||
',' => self::S_COMMA,
|
||||
'.' => self::S_DOT,
|
||||
"'" => self::S_SQUOTE,
|
||||
"`" => self::S_BACKTICK,
|
||||
'"' => self::S_DQUOTE,
|
||||
'-' => self::S_HYPHEN,
|
||||
'::' => self::S_DOUBLECOLON,
|
||||
@@ -75,8 +86,6 @@ class EmailLexer extends AbstractLexer
|
||||
"\n" => self::S_LF,
|
||||
"\r\n" => self::CRLF,
|
||||
'IPv6' => self::S_IPV6TAG,
|
||||
'{' => self::S_OPENQBRACKET,
|
||||
'}' => self::S_CLOSEQBRACKET,
|
||||
'' => self::S_EMPTY,
|
||||
'\0' => self::C_NUL,
|
||||
'*' => self::ASTERISK,
|
||||
@@ -85,6 +94,11 @@ class EmailLexer extends AbstractLexer
|
||||
'^' => self::CARET,
|
||||
'$' => self::DOLLAR,
|
||||
'%' => self::PERCENTAGE,
|
||||
'~' => self::S_TILDE,
|
||||
'|' => self::S_PIPE,
|
||||
'_' => self::S_UNDERSCORE,
|
||||
'=' => self::S_EQUAL,
|
||||
'+' => self::S_PLUS,
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -216,7 +230,7 @@ class EmailLexer extends AbstractLexer
|
||||
protected function getCatchablePatterns()
|
||||
{
|
||||
return array(
|
||||
'[a-zA-Z_]+[46]?', //ASCII and domain literal
|
||||
'[a-zA-Z]+[46]?', //ASCII and domain literal
|
||||
'[^\x00-\x7F]', //UTF-8
|
||||
'[0-9]+',
|
||||
'\r\n',
|
||||
|
||||
@@ -245,14 +245,6 @@ class DomainPart extends Parser
|
||||
*/
|
||||
protected function checkDomainPartExceptions(array $prev, bool $hasComments) : Result
|
||||
{
|
||||
$invalidDomainTokens = array(
|
||||
EmailLexer::S_DQUOTE => true,
|
||||
EmailLexer::S_SQUOTE => true,
|
||||
EmailLexer::S_SEMICOLON => true,
|
||||
EmailLexer::S_GREATERTHAN => true,
|
||||
EmailLexer::S_LOWERTHAN => true,
|
||||
);
|
||||
|
||||
$validDomainTokens = array(
|
||||
EmailLexer::GENERIC => true,
|
||||
EmailLexer::S_HYPHEN => true,
|
||||
|
||||
@@ -138,6 +138,7 @@ class EmailLexerTests extends TestCase
|
||||
array(":", EmailLexer::S_COLON),
|
||||
array(".", EmailLexer::S_DOT),
|
||||
array("\"", EmailLexer::S_DQUOTE),
|
||||
array("`", EmailLexer::S_BACKTICK),
|
||||
array("'", EmailLexer::S_SQUOTE),
|
||||
array("-", EmailLexer::S_HYPHEN),
|
||||
array("\\", EmailLexer::S_BACKSLASH),
|
||||
@@ -152,8 +153,13 @@ class EmailLexerTests extends TestCase
|
||||
array(',', EmailLexer::S_COMMA),
|
||||
array('<', EmailLexer::S_LOWERTHAN),
|
||||
array('>', EmailLexer::S_GREATERTHAN),
|
||||
array('{', EmailLexer::S_OPENQBRACKET),
|
||||
array('}', EmailLexer::S_CLOSEQBRACKET),
|
||||
array('{', EmailLexer::S_OPENCURLYBRACES),
|
||||
array('}', EmailLexer::S_CLOSECURLYBRACES),
|
||||
array('|', EmailLexer::S_PIPE),
|
||||
array('~', EmailLexer::S_TILDE),
|
||||
array('=', EmailLexer::S_EQUAL),
|
||||
array('+', EmailLexer::S_PLUS),
|
||||
array('_', EmailLexer::S_UNDERSCORE),
|
||||
array('', EmailLexer::S_EMPTY),
|
||||
array(chr(31), EmailLexer::INVALID),
|
||||
array(chr(226), EmailLexer::GENERIC),
|
||||
|
||||
@@ -126,12 +126,20 @@ class RFCValidationDomainPartTest extends TestCase
|
||||
['example@toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart.co.uk'],
|
||||
['example@toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart.test.co.uk'],
|
||||
['example@test.toolonglocalparttoolonglocalparttoolonglocalparttoolonglocalpart.co.uk'],
|
||||
['test@email*'],
|
||||
['test@email!'],
|
||||
['test@email&'],
|
||||
['test@email^'],
|
||||
['test@email%'],
|
||||
['test@email$'],
|
||||
['test@email*a.com'],
|
||||
['test@email!a.com'],
|
||||
['test@email&a.com'],
|
||||
['test@email^a.com'],
|
||||
['test@email%a.com'],
|
||||
['test@email$a.com'],
|
||||
['test@email`a.com'],
|
||||
['test@email|a.com'],
|
||||
['test@email~a.com'],
|
||||
['test@email{a.com'],
|
||||
['test@email}a.com'],
|
||||
['test@email=a.com'],
|
||||
['test@email+a.com'],
|
||||
['test@email_a.com'],
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -64,7 +64,8 @@ class RFCValidationTest extends TestCase
|
||||
['fab\'ien@symfony.com'],
|
||||
['fab\ ien@symfony.com'],
|
||||
['example((example))@fakedfake.co.uk'],
|
||||
['fabien+@symfony.com'],
|
||||
['fabien+a@symfony.com'],
|
||||
['exampl=e@example.com'],
|
||||
['инфо@письмо.рф'],
|
||||
['"username"@example.com'],
|
||||
['"user,name"@example.com'],
|
||||
|
||||
Reference in New Issue
Block a user