mirror of
https://github.com/egulias/EmailValidator.git
synced 2026-09-03 22:19:28 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c26463ff92 | |||
| a09af2de87 | |||
| c802f106b3 | |||
| 709f21f927 | |||
| e68c26e065 | |||
| 8036f2bd05 | |||
| 0043eab0c5 |
+4
-4
@@ -8,7 +8,7 @@ php:
|
|||||||
- 7.0
|
- 7.0
|
||||||
- 7.1
|
- 7.1
|
||||||
- 7.2
|
- 7.2
|
||||||
- hhvm
|
- 7.3
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
@@ -28,8 +28,8 @@ install:
|
|||||||
- if [ "$deps" = "high" ]; then composer update; fi
|
- if [ "$deps" = "high" ]; then composer update; fi
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- mkdir -p build/logs
|
- mkdir -p build/logs
|
||||||
- vendor/bin/phpunit --coverage-clover build/logs/clover.xml
|
- vendor/bin/phpunit --coverage-clover build/logs/clover.xml
|
||||||
|
|
||||||
after_script:
|
after_script:
|
||||||
- php vendor/bin/coveralls
|
- php vendor/bin/coveralls
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ class EmailLexer extends AbstractLexer
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $type
|
* @param string $type
|
||||||
* @throws \UnexpectedValueException
|
* @throws \UnexpectedValueException
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
@@ -189,7 +189,7 @@ class EmailLexer extends AbstractLexer
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $value
|
* @param string $value
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function isNullType($value)
|
protected function isNullType($value)
|
||||||
@@ -202,7 +202,7 @@ class EmailLexer extends AbstractLexer
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $value
|
* @param string $value
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function isUTF8Invalid($value)
|
protected function isUTF8Invalid($value)
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class EmailParser
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $str
|
* @param string $str
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function parse($str)
|
public function parse($str)
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class EmailValidator
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $email
|
* @param string $email
|
||||||
* @param EmailValidation $emailValidation
|
* @param EmailValidation $emailValidation
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace Egulias\EmailValidator\Exception;
|
namespace Egulias\EmailValidator\Exception;
|
||||||
|
|
||||||
class ExpectedQPair extends InvalidEmail
|
class ExpectingQPair extends InvalidEmail
|
||||||
{
|
{
|
||||||
const CODE = 136;
|
const CODE = 136;
|
||||||
const REASON = "Expecting QPAIR";
|
const REASON = "Expecting QPAIR";
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
namespace Egulias\EmailValidator\Exception;
|
namespace Egulias\EmailValidator\Exception;
|
||||||
|
|
||||||
use Egulias\EmailValidator\Exception\InvalidEmail;
|
|
||||||
|
|
||||||
class NoDNSRecord extends InvalidEmail
|
class NoDNSRecord extends InvalidEmail
|
||||||
{
|
{
|
||||||
const CODE = 5;
|
const CODE = 5;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ use Egulias\EmailValidator\Exception\ConsecutiveDot;
|
|||||||
use Egulias\EmailValidator\Exception\CRLFAtTheEnd;
|
use Egulias\EmailValidator\Exception\CRLFAtTheEnd;
|
||||||
use Egulias\EmailValidator\Exception\CRLFX2;
|
use Egulias\EmailValidator\Exception\CRLFX2;
|
||||||
use Egulias\EmailValidator\Exception\CRNoLF;
|
use Egulias\EmailValidator\Exception\CRNoLF;
|
||||||
use Egulias\EmailValidator\Exception\ExpectedQPair;
|
use Egulias\EmailValidator\Exception\ExpectingQPair;
|
||||||
use Egulias\EmailValidator\Exception\ExpectingATEXT;
|
use Egulias\EmailValidator\Exception\ExpectingATEXT;
|
||||||
use Egulias\EmailValidator\Exception\ExpectingCTEXT;
|
use Egulias\EmailValidator\Exception\ExpectingCTEXT;
|
||||||
use Egulias\EmailValidator\Exception\UnclosedComment;
|
use Egulias\EmailValidator\Exception\UnclosedComment;
|
||||||
@@ -50,7 +50,7 @@ abstract class Parser
|
|||||||
{
|
{
|
||||||
if (!($this->lexer->token['type'] === EmailLexer::INVALID
|
if (!($this->lexer->token['type'] === EmailLexer::INVALID
|
||||||
|| $this->lexer->token['type'] === EmailLexer::C_DEL)) {
|
|| $this->lexer->token['type'] === EmailLexer::C_DEL)) {
|
||||||
throw new ExpectedQPair();
|
throw new ExpectingQPair();
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->warnings[QuotedPart::CODE] =
|
$this->warnings[QuotedPart::CODE] =
|
||||||
|
|||||||
@@ -62,7 +62,8 @@ class MultipleValidationWithAnd implements EmailValidation
|
|||||||
$errors = [];
|
$errors = [];
|
||||||
foreach ($this->validations as $validation) {
|
foreach ($this->validations as $validation) {
|
||||||
$emailLexer->reset();
|
$emailLexer->reset();
|
||||||
$result = $result && $validation->isValid($email, $emailLexer);
|
$validationResult = $validation->isValid($email, $emailLexer);
|
||||||
|
$result = $result && $validationResult;
|
||||||
$this->warnings = array_merge($this->warnings, $validation->getWarnings());
|
$this->warnings = array_merge($this->warnings, $validation->getWarnings());
|
||||||
$errors = $this->addNewError($validation->getError(), $errors);
|
$errors = $this->addNewError($validation->getError(), $errors);
|
||||||
|
|
||||||
|
|||||||
@@ -1,19 +1,22 @@
|
|||||||
# 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 [PHPStorm](https://www.jetbrains.com/phpstorm/)
|
## Suported RFCs ##
|
||||||
|
This library aims to support:
|
||||||
|
|
||||||
|
RFC 5321, 5322, 6530, 6531, 6532.
|
||||||
|
|
||||||
## Requirements ##
|
## Requirements ##
|
||||||
|
|
||||||
* [Composer](https://getcomposer.org) is required for installation
|
* [Composer](https://getcomposer.org) is required for installation
|
||||||
* [Spoofchecking](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/SpoofCheckValidation.php) and [DNSCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/DNSCheckValidation.php) validation requires that your PHP system have the [PHP Internationalization Libraries](https://php.net/manual/en/book.intl.php) (also known as PHP Intl)
|
* [Spoofchecking](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/SpoofCheckValidation.php) and [DNSCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/DNSCheckValidation.php) validation requires that your PHP system has the [PHP Internationalization Libraries](https://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
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
composer require egulias/email-validator "~2.1"
|
composer require egulias/email-validator
|
||||||
```
|
```
|
||||||
|
|
||||||
## Getting Started ##
|
## Getting Started ##
|
||||||
|
|||||||
+44
-5
@@ -2,15 +2,18 @@
|
|||||||
|
|
||||||
namespace Egulias\Tests\EmailValidator\Validation;
|
namespace Egulias\Tests\EmailValidator\Validation;
|
||||||
|
|
||||||
|
use Egulias\EmailValidator\EmailValidator;
|
||||||
use Egulias\EmailValidator\Exception\CommaInDomain;
|
use Egulias\EmailValidator\Exception\CommaInDomain;
|
||||||
use Egulias\EmailValidator\Exception\NoDomainPart;
|
use Egulias\EmailValidator\Exception\NoDomainPart;
|
||||||
use Egulias\EmailValidator\Validation\MultipleErrors;
|
use Egulias\EmailValidator\Validation\MultipleErrors;
|
||||||
use Egulias\EmailValidator\Validation\MultipleValidationWithAnd;
|
use Egulias\EmailValidator\Validation\MultipleValidationWithAnd;
|
||||||
|
use Egulias\EmailValidator\Validation\NoRFCWarningsValidation;
|
||||||
|
use Egulias\EmailValidator\Validation\RFCValidation;
|
||||||
use Egulias\EmailValidator\Warning\AddressLiteral;
|
use Egulias\EmailValidator\Warning\AddressLiteral;
|
||||||
use Egulias\EmailValidator\Warning\DomainLiteral;
|
use Egulias\EmailValidator\Warning\DomainLiteral;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
class MultipleValidationWitAndTest extends TestCase
|
class MultipleValidationWithAndTest extends TestCase
|
||||||
{
|
{
|
||||||
public function testUsesAndLogicalOperation()
|
public function testUsesAndLogicalOperation()
|
||||||
{
|
{
|
||||||
@@ -81,16 +84,40 @@ class MultipleValidationWitAndTest extends TestCase
|
|||||||
$lexer = $this->getMockBuilder("Egulias\\EmailValidator\\EmailLexer")->getMock();
|
$lexer = $this->getMockBuilder("Egulias\\EmailValidator\\EmailLexer")->getMock();
|
||||||
|
|
||||||
$validation1 = $this->getMockBuilder("Egulias\\EmailValidator\\Validation\\EmailValidation")->getMock();
|
$validation1 = $this->getMockBuilder("Egulias\\EmailValidator\\Validation\\EmailValidation")->getMock();
|
||||||
$validation1->expects($this->any())->method("isValid")->willReturn(true);
|
$validation1->expects($this->once())->method("isValid")->willReturn(false);
|
||||||
|
$validation1->expects($this->once())->method("getWarnings")->willReturn([]);
|
||||||
|
$validation1->expects($this->once())->method("getError")->willReturn($error1);
|
||||||
|
|
||||||
|
$validation2 = $this->getMockBuilder("Egulias\\EmailValidator\\Validation\\EmailValidation")->getMock();
|
||||||
|
$validation2->expects($this->once())->method("isValid")->willReturn(false);
|
||||||
|
$validation2->expects($this->once())->method("getWarnings")->willReturn([]);
|
||||||
|
$validation2->expects($this->once())->method("getError")->willReturn($error2);
|
||||||
|
|
||||||
|
$multipleValidation = new MultipleValidationWithAnd([$validation1, $validation2]);
|
||||||
|
$multipleValidation->isValid("example@example.com", $lexer);
|
||||||
|
$this->assertEquals($expectedResult, $multipleValidation->getError());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testStopsAfterFirstError()
|
||||||
|
{
|
||||||
|
$error1 = new CommaInDomain();
|
||||||
|
$error2 = new NoDomainPart();
|
||||||
|
|
||||||
|
$expectedResult = new MultipleErrors([$error1]);
|
||||||
|
|
||||||
|
$lexer = $this->getMockBuilder("Egulias\\EmailValidator\\EmailLexer")->getMock();
|
||||||
|
|
||||||
|
$validation1 = $this->getMockBuilder("Egulias\\EmailValidator\\Validation\\EmailValidation")->getMock();
|
||||||
|
$validation1->expects($this->any())->method("isValid")->willReturn(false);
|
||||||
$validation1->expects($this->once())->method("getWarnings")->willReturn([]);
|
$validation1->expects($this->once())->method("getWarnings")->willReturn([]);
|
||||||
$validation1->expects($this->once())->method("getError")->willReturn($error1);
|
$validation1->expects($this->once())->method("getError")->willReturn($error1);
|
||||||
|
|
||||||
$validation2 = $this->getMockBuilder("Egulias\\EmailValidator\\Validation\\EmailValidation")->getMock();
|
$validation2 = $this->getMockBuilder("Egulias\\EmailValidator\\Validation\\EmailValidation")->getMock();
|
||||||
$validation2->expects($this->any())->method("isValid")->willReturn(false);
|
$validation2->expects($this->any())->method("isValid")->willReturn(false);
|
||||||
$validation2->expects($this->once())->method("getWarnings")->willReturn([]);
|
$validation2->expects($this->never())->method("getWarnings")->willReturn([]);
|
||||||
$validation2->expects($this->once())->method("getError")->willReturn($error2);
|
$validation2->expects($this->never())->method("getError")->willReturn($error2);
|
||||||
|
|
||||||
$multipleValidation = new MultipleValidationWithAnd([$validation1, $validation2]);
|
$multipleValidation = new MultipleValidationWithAnd([$validation1, $validation2], MultipleValidationWithAnd::STOP_ON_ERROR);
|
||||||
$multipleValidation->isValid("example@example.com", $lexer);
|
$multipleValidation->isValid("example@example.com", $lexer);
|
||||||
$this->assertEquals($expectedResult, $multipleValidation->getError());
|
$this->assertEquals($expectedResult, $multipleValidation->getError());
|
||||||
}
|
}
|
||||||
@@ -117,4 +144,16 @@ class MultipleValidationWitAndTest extends 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 testBreakoutOnInvalidEmail()
|
||||||
|
{
|
||||||
|
$lexer = $this->getMockBuilder("Egulias\\EmailValidator\\EmailLexer")->getMock();
|
||||||
|
|
||||||
|
$validationNotCalled = $this->getMockBuilder("Egulias\\EmailValidator\\Validation\\EmailValidation")->getMock();
|
||||||
|
$validationNotCalled->expects($this->never())->method("isValid");
|
||||||
|
$validationNotCalled->expects($this->never())->method("getWarnings");
|
||||||
|
$validationNotCalled->expects($this->never())->method("getError");
|
||||||
|
$multipleValidation = new MultipleValidationWithAnd([new RFCValidation(), $validationNotCalled], MultipleValidationWithAnd::STOP_ON_ERROR);
|
||||||
|
$this->assertFalse($multipleValidation->isValid("invalid-email", $lexer));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user