mirror of
https://github.com/egulias/EmailValidator.git
synced 2026-09-09 01:26:57 +00:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 30562b69fc | |||
| cbb8b9e152 | |||
| cf670406e5 | |||
| 4d446bf971 | |||
| 4f0f9023f0 | |||
| 9160e26b13 | |||
| eb036b7d1c | |||
| 19811e0082 | |||
| b366d54b0a | |||
| 2bc46e23e5 | |||
| 7701238433 | |||
| afde3d3874 | |||
| e9c46eed92 |
@@ -0,0 +1,4 @@
|
|||||||
|
/Tests export-ignore
|
||||||
|
/documentation export-ignore
|
||||||
|
/.* export-ignore
|
||||||
|
/phpunit.xml.dist
|
||||||
@@ -58,7 +58,7 @@ class EmailValidator
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return InvalidEmail
|
||||||
*/
|
*/
|
||||||
public function getError()
|
public function getError()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,16 +3,12 @@
|
|||||||
namespace Egulias\EmailValidator\Validation;
|
namespace Egulias\EmailValidator\Validation;
|
||||||
|
|
||||||
use Egulias\EmailValidator\EmailLexer;
|
use Egulias\EmailValidator\EmailLexer;
|
||||||
|
use Egulias\EmailValidator\Exception\InvalidEmail;
|
||||||
use Egulias\EmailValidator\Warning\NoDNSMXRecord;
|
use Egulias\EmailValidator\Warning\NoDNSMXRecord;
|
||||||
use Egulias\EmailValidator\Exception\NoDNSRecord;
|
use Egulias\EmailValidator\Exception\NoDNSRecord;
|
||||||
|
|
||||||
class DNSCheckValidation implements EmailValidation
|
class DNSCheckValidation implements EmailValidation
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @var EmailParser
|
|
||||||
*/
|
|
||||||
private $parser;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
@@ -27,10 +23,10 @@ class DNSCheckValidation implements EmailValidation
|
|||||||
{
|
{
|
||||||
// use the input to check DNS if we cannot extract something similar to a domain
|
// use the input to check DNS if we cannot extract something similar to a domain
|
||||||
$host = $email;
|
$host = $email;
|
||||||
|
|
||||||
// Arguable pattern to extract the domain. Not aiming to validate the domain nor the email
|
// Arguable pattern to extract the domain. Not aiming to validate the domain nor the email
|
||||||
$pattern = "/^[a-z'0-9]+([._-][a-z'0-9]+)*@([a-z0-9]+([._-][a-z0-9]+)+)+$/";
|
if (false !== $lastAtPos = strrpos($email, '@')) {
|
||||||
if (preg_match($pattern, $email, $result)) {
|
$host = substr($email, $lastAtPos + 1);
|
||||||
$host = $this->extractHost($result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->checkDNS($host);
|
return $this->checkDNS($host);
|
||||||
@@ -46,16 +42,6 @@ class DNSCheckValidation implements EmailValidation
|
|||||||
return $this->warnings;
|
return $this->warnings;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function extractHost(array $result)
|
|
||||||
{
|
|
||||||
foreach ($result as $match) {
|
|
||||||
$onlyDomainPattern = "/^([a-z0-9]+([._-][a-z0-9]+))+$/";
|
|
||||||
if (preg_match($onlyDomainPattern, $match, $domainResult)) {
|
|
||||||
return $domainResult[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function checkDNS($host)
|
protected function checkDNS($host)
|
||||||
{
|
{
|
||||||
$Aresult = true;
|
$Aresult = true;
|
||||||
@@ -63,7 +49,7 @@ class DNSCheckValidation implements EmailValidation
|
|||||||
|
|
||||||
if (!$MXresult) {
|
if (!$MXresult) {
|
||||||
$this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord();
|
$this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord();
|
||||||
$Aresult = checkdnsrr($host, 'A');
|
$Aresult = checkdnsrr($host, 'A') || checkdnsrr($host, 'AAAA');
|
||||||
if (!$Aresult) {
|
if (!$Aresult) {
|
||||||
$this->error = new NoDNSRecord();
|
$this->error = new NoDNSRecord();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,18 +3,32 @@
|
|||||||
namespace Egulias\EmailValidator\Validation;
|
namespace Egulias\EmailValidator\Validation;
|
||||||
|
|
||||||
use Egulias\EmailValidator\EmailLexer;
|
use Egulias\EmailValidator\EmailLexer;
|
||||||
|
use Egulias\EmailValidator\Exception\InvalidEmail;
|
||||||
|
use Egulias\EmailValidator\Warning\Warning;
|
||||||
|
|
||||||
interface EmailValidation
|
interface EmailValidation
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Returns true if the given email is valid.
|
||||||
|
*
|
||||||
|
* @param string $email The email you want to validate.
|
||||||
|
* @param EmailLexer $emailLexer The email lexer.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
public function isValid($email, EmailLexer $emailLexer);
|
public function isValid($email, EmailLexer $emailLexer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return InvalidEmail
|
* Returns the validation error.
|
||||||
|
*
|
||||||
|
* @return InvalidEmail|null
|
||||||
*/
|
*/
|
||||||
public function getError();
|
public function getError();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array of Warning
|
* Returns the validation warnings.
|
||||||
|
*
|
||||||
|
* @return Warning[]
|
||||||
*/
|
*/
|
||||||
public function getWarnings();
|
public function getWarnings();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Egulias\EmailValidator\Validation\Error;
|
||||||
|
|
||||||
|
use Egulias\EmailValidator\Exception\InvalidEmail;
|
||||||
|
|
||||||
|
class RFCWarnings extends InvalidEmail
|
||||||
|
{
|
||||||
|
const CODE = 997;
|
||||||
|
const REASON = 'Warnings were found.';
|
||||||
|
}
|
||||||
@@ -7,19 +7,55 @@ use Egulias\EmailValidator\Validation\Exception\EmptyValidationList;
|
|||||||
|
|
||||||
class MultipleValidationWithAnd implements EmailValidation
|
class MultipleValidationWithAnd implements EmailValidation
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* If one of validations gets failure skips all succeeding validation.
|
||||||
|
* This means MultipleErrors will only contain a single error which first found.
|
||||||
|
*/
|
||||||
|
const STOP_ON_ERROR = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All of validations will be invoked even if one of them got failure.
|
||||||
|
* So MultipleErrors will contain all causes.
|
||||||
|
*/
|
||||||
|
const ALLOW_ALL_ERRORS = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var EmailValidation[]
|
||||||
|
*/
|
||||||
private $validations = [];
|
private $validations = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
private $warnings = [];
|
private $warnings = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var MultipleErrors
|
||||||
|
*/
|
||||||
private $error;
|
private $error;
|
||||||
|
|
||||||
public function __construct(array $validations)
|
/**
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
private $mode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param EmailValidation[] $validations The validations.
|
||||||
|
* @param int $mode The validation mode (one of the constants).
|
||||||
|
*/
|
||||||
|
public function __construct(array $validations, $mode = self::ALLOW_ALL_ERRORS)
|
||||||
{
|
{
|
||||||
if (count($validations) == 0) {
|
if (count($validations) == 0) {
|
||||||
throw new EmptyValidationList();
|
throw new EmptyValidationList();
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->validations = $validations;
|
$this->validations = $validations;
|
||||||
|
$this->mode = $mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
public function isValid($email, EmailLexer $emailLexer)
|
public function isValid($email, EmailLexer $emailLexer)
|
||||||
{
|
{
|
||||||
$result = true;
|
$result = true;
|
||||||
@@ -28,18 +64,45 @@ class MultipleValidationWithAnd implements EmailValidation
|
|||||||
$emailLexer->reset();
|
$emailLexer->reset();
|
||||||
$result = $result && $validation->isValid($email, $emailLexer);
|
$result = $result && $validation->isValid($email, $emailLexer);
|
||||||
$this->warnings = array_merge($this->warnings, $validation->getWarnings());
|
$this->warnings = array_merge($this->warnings, $validation->getWarnings());
|
||||||
$errors[] = $validation->getError();
|
$errors = $this->addNewError($validation->getError(), $errors);
|
||||||
|
|
||||||
|
if ($this->shouldStop($result)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$this->error = new MultipleErrors($errors);
|
|
||||||
|
if (!empty($errors)) {
|
||||||
|
$this->error = new MultipleErrors($errors);
|
||||||
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function addNewError($possibleError, array $errors)
|
||||||
|
{
|
||||||
|
if (null !== $possibleError) {
|
||||||
|
$errors[] = $possibleError;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function shouldStop($result)
|
||||||
|
{
|
||||||
|
return !$result && $this->mode === self::STOP_ON_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
public function getError()
|
public function getError()
|
||||||
{
|
{
|
||||||
return $this->error;
|
return $this->error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
public function getWarnings()
|
public function getWarnings()
|
||||||
{
|
{
|
||||||
return $this->warnings;
|
return $this->warnings;
|
||||||
|
|||||||
@@ -3,11 +3,39 @@
|
|||||||
namespace Egulias\EmailValidator\Validation;
|
namespace Egulias\EmailValidator\Validation;
|
||||||
|
|
||||||
use Egulias\EmailValidator\EmailLexer;
|
use Egulias\EmailValidator\EmailLexer;
|
||||||
|
use Egulias\EmailValidator\Exception\InvalidEmail;
|
||||||
|
use Egulias\EmailValidator\Validation\Error\RFCWarnings;
|
||||||
|
|
||||||
class NoRFCWarningsValidation extends RFCValidation
|
class NoRFCWarningsValidation extends RFCValidation
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @var InvalidEmail
|
||||||
|
*/
|
||||||
|
private $error;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
public function isValid($email, EmailLexer $emailLexer)
|
public function isValid($email, EmailLexer $emailLexer)
|
||||||
{
|
{
|
||||||
return parent::isValid($email, $emailLexer) && empty($this->getWarnings());
|
if (!parent::isValid($email, $emailLexer)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($this->getWarnings())) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->error = new RFCWarnings();
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritdoc}
|
||||||
|
*/
|
||||||
|
public function getError()
|
||||||
|
{
|
||||||
|
return $this->error ?: parent::getError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
namespace Egulias\EmailValidator\Validation;
|
namespace Egulias\EmailValidator\Validation;
|
||||||
|
|
||||||
use Egulias\EmailValidator\EmailLexer;
|
use Egulias\EmailValidator\EmailLexer;
|
||||||
|
use Egulias\EmailValidator\Exception\InvalidEmail;
|
||||||
use Egulias\EmailValidator\Validation\Error\SpoofEmail;
|
use Egulias\EmailValidator\Validation\Error\SpoofEmail;
|
||||||
use \Spoofchecker;
|
use \Spoofchecker;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
#EmailValidator
|
#EmailValidator
|
||||||
[](https://travis-ci.org/egulias/EmailValidator) [](https://coveralls.io/r/egulias/EmailValidator?branch=master) [](https://scrutinizer-ci.com/g/egulias/EmailValidator/?branch=master) [](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6)
|
[](https://travis-ci.org/egulias/EmailValidator) [](https://coveralls.io/r/egulias/EmailValidator?branch=master) [](https://scrutinizer-ci.com/g/egulias/EmailValidator/?branch=master) [](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6)
|
||||||
=============================
|
=============================
|
||||||
With the help of
|
With the help of [PHPStorm](https://www.jetbrains.com/phpstorm/)
|
||||||
|
|
||||||
|
##Requirements##
|
||||||
|
|
||||||
|
* [Composer](https://getcomposer.org) is required for installation
|
||||||
|
* [Spoofchecking](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/SpoofCheckValidation.php) validation requires that your PHP system have the [PHP Internationalization Libraries](http://php.net/manual/en/book.intl.php) (also known as PHP Intl)
|
||||||
|
|
||||||

|
|
||||||
##Installation##
|
##Installation##
|
||||||
|
|
||||||
Run the command below to install via Composer
|
Run the command below to install via Composer
|
||||||
@@ -32,10 +36,10 @@ $validator->isValid("example@example.com", new RFCValidation()) //true
|
|||||||
2. [NoWarningsRFCValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/NoRFCWarningsValidation.php)
|
2. [NoWarningsRFCValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/NoRFCWarningsValidation.php)
|
||||||
3. [DNSCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/DNSCheckValidation.php)
|
3. [DNSCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/DNSCheckValidation.php)
|
||||||
4. [SpoofCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/SpoofCheckValidation.php)
|
4. [SpoofCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/SpoofCheckValidation.php)
|
||||||
5. [MultipleValidationsWithAnd](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/MultipleValidationWithAnd.php)
|
5. [MultipleValidationWithAnd](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/MultipleValidationWithAnd.php)
|
||||||
6. [Your own validation](#how-to-extend)
|
6. [Your own validation](#how-to-extend)
|
||||||
|
|
||||||
`MultipleValidationsWithAnd`
|
`MultipleValidationWithAnd`
|
||||||
|
|
||||||
It is a validation that operates over other validations performing a logical and (&&) over the result of each validation.
|
It is a validation that operates over other validations performing a logical and (&&) over the result of each validation.
|
||||||
|
|
||||||
@@ -43,13 +47,16 @@ It is a validation that operates over other validations performing a logical and
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Egulias\EmailValidator\EmailValidator;
|
use Egulias\EmailValidator\EmailValidator;
|
||||||
|
use Egulias\EmailValidator\Validation\DNSCheckValidation;
|
||||||
|
use Egulias\EmailValidator\Validation\MultipleValidationWithAnd;
|
||||||
|
use Egulias\EmailValidator\Validation\RFCValidation;
|
||||||
|
|
||||||
$validator = new EmailValidator();
|
$validator = new EmailValidator();
|
||||||
$multipleValidations = new MultipleValidationsWithAnd([
|
$multipleValidations = new MultipleValidationWithAnd([
|
||||||
new RFCValidation(),
|
new RFCValidation(),
|
||||||
new DNSCheckValidation()
|
new DNSCheckValidation()
|
||||||
])
|
]);
|
||||||
$validator->isValid("example@example.com", $multipleValidations) //true
|
$validator->isValid("example@example.com", $multipleValidations); //true
|
||||||
```
|
```
|
||||||
|
|
||||||
###How to extend###
|
###How to extend###
|
||||||
|
|||||||
@@ -9,10 +9,30 @@ use Egulias\EmailValidator\Warning\NoDNSMXRecord;
|
|||||||
|
|
||||||
class DNSCheckValidationTest extends \PHPUnit_Framework_TestCase
|
class DNSCheckValidationTest extends \PHPUnit_Framework_TestCase
|
||||||
{
|
{
|
||||||
public function testValidDNS()
|
public function validEmailsProvider()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
// dot-atom
|
||||||
|
['Abc@example.com'],
|
||||||
|
['ABC@EXAMPLE.COM'],
|
||||||
|
['Abc.123@example.com'],
|
||||||
|
['user+mailbox/department=shipping@example.com'],
|
||||||
|
['!#$%&\'*+-/=?^_`.{|}~@example.com'],
|
||||||
|
|
||||||
|
// quoted string
|
||||||
|
['"Abc@def"@example.com'],
|
||||||
|
['"Fred\ Bloggs"@example.com'],
|
||||||
|
['"Joe.\\Blow"@example.com'],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider validEmailsProvider
|
||||||
|
*/
|
||||||
|
public function testValidDNS($validEmail)
|
||||||
{
|
{
|
||||||
$validation = new DNSCheckValidation();
|
$validation = new DNSCheckValidation();
|
||||||
$this->assertTrue($validation->isValid("example@example.com", new EmailLexer()));
|
$this->assertTrue($validation->isValid($validEmail, new EmailLexer()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testInvalidDNS()
|
public function testInvalidDNS()
|
||||||
|
|||||||
@@ -25,13 +25,26 @@ class MultipleValidationWitAndTest extends \PHPUnit_Framework_TestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException Egulias\EmailValidator\Validation\Exception\EmptyValidationList
|
* @expectedException \Egulias\EmailValidator\Validation\Exception\EmptyValidationList
|
||||||
*/
|
*/
|
||||||
public function testEmptyListIsNotAllowed()
|
public function testEmptyListIsNotAllowed()
|
||||||
{
|
{
|
||||||
new MultipleValidationWithAnd([]);
|
new MultipleValidationWithAnd([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testValidationIsValid()
|
||||||
|
{
|
||||||
|
$lexer = $this->getMock("Egulias\\EmailValidator\\EmailLexer");
|
||||||
|
|
||||||
|
$validation = $this->getMock("Egulias\\EmailValidator\\Validation\\EmailValidation");
|
||||||
|
$validation->expects($this->any())->method("isValid")->willReturn(true);
|
||||||
|
$validation->expects($this->once())->method("getWarnings")->willReturn([]);
|
||||||
|
|
||||||
|
$multipleValidation = new MultipleValidationWithAnd([$validation]);
|
||||||
|
$this->assertTrue($multipleValidation->isValid("example@example.com", $lexer));
|
||||||
|
$this->assertNull($multipleValidation->getError());
|
||||||
|
}
|
||||||
|
|
||||||
public function testAccumulatesWarnings()
|
public function testAccumulatesWarnings()
|
||||||
{
|
{
|
||||||
$warnings1 = [
|
$warnings1 = [
|
||||||
@@ -79,4 +92,27 @@ class MultipleValidationWitAndTest extends \PHPUnit_Framework_TestCase
|
|||||||
$multipleValidation->isValid("example@example.com", $lexer);
|
$multipleValidation->isValid("example@example.com", $lexer);
|
||||||
$this->assertEquals($expectedResult, $multipleValidation->getError());
|
$this->assertEquals($expectedResult, $multipleValidation->getError());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testBreakOutOfLoopWhenError()
|
||||||
|
{
|
||||||
|
$error = new CommaInDomain();
|
||||||
|
|
||||||
|
$expectedResult = new MultipleErrors([$error]);
|
||||||
|
|
||||||
|
$lexer = $this->getMock("Egulias\\EmailValidator\\EmailLexer");
|
||||||
|
|
||||||
|
$validation1 = $this->getMock("Egulias\\EmailValidator\\Validation\\EmailValidation");
|
||||||
|
$validation1->expects($this->any())->method("isValid")->willReturn(false);
|
||||||
|
$validation1->expects($this->once())->method("getWarnings")->willReturn([]);
|
||||||
|
$validation1->expects($this->once())->method("getError")->willReturn($error);
|
||||||
|
|
||||||
|
$validation2 = $this->getMock("Egulias\\EmailValidator\\Validation\\EmailValidation");
|
||||||
|
$validation2->expects($this->never())->method("isValid");
|
||||||
|
$validation2->expects($this->never())->method("getWarnings");
|
||||||
|
$validation2->expects($this->never())->method("getError");
|
||||||
|
|
||||||
|
$multipleValidation = new MultipleValidationWithAnd([$validation1, $validation2], MultipleValidationWithAnd::STOP_ON_ERROR);
|
||||||
|
$multipleValidation->isValid("example@example.com", $lexer);
|
||||||
|
$this->assertEquals($expectedResult, $multipleValidation->getError());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Egulias\Tests\EmailValidator\Validation;
|
||||||
|
|
||||||
|
use Egulias\EmailValidator\EmailLexer;
|
||||||
|
use Egulias\EmailValidator\Exception\NoDomainPart;
|
||||||
|
use Egulias\EmailValidator\Validation\Error\RFCWarnings;
|
||||||
|
use Egulias\EmailValidator\Validation\NoRFCWarningsValidation;
|
||||||
|
|
||||||
|
class NoRFCWarningsValidationTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testInvalidEmailIsInvalid()
|
||||||
|
{
|
||||||
|
$validation = new NoRFCWarningsValidation();
|
||||||
|
|
||||||
|
$this->assertFalse($validation->isValid('non-email-string', new EmailLexer()));
|
||||||
|
$this->assertInstanceOf(NoDomainPart::class, $validation->getError());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEmailWithWarningsIsInvalid()
|
||||||
|
{
|
||||||
|
$validation = new NoRFCWarningsValidation();
|
||||||
|
|
||||||
|
$this->assertFalse($validation->isValid(str_repeat('x', 254).'@example.com', new EmailLexer())); // too long email
|
||||||
|
$this->assertInstanceOf(RFCWarnings::class, $validation->getError());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testEmailWithoutWarningsIsValid()
|
||||||
|
{
|
||||||
|
$validation = new NoRFCWarningsValidation();
|
||||||
|
|
||||||
|
$this->assertTrue($validation->isValid('example@example.com', new EmailLexer()));
|
||||||
|
$this->assertNull($validation->getError());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Egulias\Tests\EmailValidator\Validation;
|
|
||||||
|
|
||||||
use Egulias\EmailValidator\EmailLexer;
|
|
||||||
use Egulias\EmailValidator\Validation\NoRFCWarningsValidation;
|
|
||||||
|
|
||||||
class NoWarningsRFCValidationTest extends \PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
public function testEmailWithWarningsIsInvalid()
|
|
||||||
{
|
|
||||||
$validation = new NoRFCWarningsValidation();
|
|
||||||
|
|
||||||
$this->assertFalse($validation->isValid('examp"l"e@example.com', new EmailLexer()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testEmailWithoutWarningsIsValid()
|
|
||||||
{
|
|
||||||
$validation = new NoRFCWarningsValidation();
|
|
||||||
|
|
||||||
$this->assertTrue($validation->isValid('example@example.com', new EmailLexer()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -28,6 +28,9 @@
|
|||||||
"phpunit/phpunit": "^4.8.0",
|
"phpunit/phpunit": "^4.8.0",
|
||||||
"dominicsayers/isemail": "dev-master"
|
"dominicsayers/isemail": "dev-master"
|
||||||
},
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext/php-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
|
||||||
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"Egulias\\EmailValidator\\": "EmailValidator"
|
"Egulias\\EmailValidator\\": "EmailValidator"
|
||||||
|
|||||||
Reference in New Issue
Block a user