Skip to content

Commit 714542a

Browse files
committed
Merge pull request #36 from piotrjura/datetime-email-expander
Datetime email expander
2 parents 59de4b0 + 602f10a commit 714542a

File tree

5 files changed

+167
-0
lines changed

5 files changed

+167
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?php
2+
3+
namespace Coduo\PHPMatcher\Matcher\Pattern\Expander;
4+
5+
use Coduo\PHPMatcher\Matcher\Pattern\PatternExpander;
6+
use Coduo\ToString\String;
7+
8+
class IsDateTime implements PatternExpander
9+
{
10+
/**
11+
* @var null|string
12+
*/
13+
private $error;
14+
15+
/**
16+
* @param string $value
17+
* @return boolean
18+
*/
19+
public function match($value)
20+
{
21+
if (false === is_string($value)) {
22+
$this->error = sprintf("IsDateTime expander require \"string\", got \"%s\".", new String($value));
23+
return false;
24+
}
25+
26+
if (false === $this->matchValue($value)) {
27+
$this->error = sprintf("string \"%s\" is not a valid date.", $value);
28+
return false;
29+
}
30+
31+
return true;
32+
}
33+
34+
/**
35+
* @return string|null
36+
*/
37+
public function getError()
38+
{
39+
return $this->error;
40+
}
41+
42+
/**
43+
* @param string $value
44+
* @return bool
45+
*/
46+
protected function matchValue($value)
47+
{
48+
try {
49+
new \DateTime($value);
50+
return true;
51+
} catch (\Exception $e) {
52+
return false;
53+
}
54+
}
55+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
namespace Coduo\PHPMatcher\Matcher\Pattern\Expander;
4+
5+
use Coduo\PHPMatcher\Matcher\Pattern\PatternExpander;
6+
use Coduo\ToString\String;
7+
8+
class IsEmail implements PatternExpander
9+
{
10+
/**
11+
* @var null|string
12+
*/
13+
private $error;
14+
15+
/**
16+
* @param string $value
17+
* @return boolean
18+
*/
19+
public function match($value)
20+
{
21+
if (false === is_string($value)) {
22+
$this->error = sprintf("IsEmail expander require \"string\", got \"%s\".", new String($value));
23+
return false;
24+
}
25+
26+
if (false === $this->matchValue($value)) {
27+
$this->error = sprintf("string \"%s\" is not a valid e-mail address.", $value);
28+
return false;
29+
}
30+
31+
return true;
32+
}
33+
34+
/**
35+
* @return string|null
36+
*/
37+
public function getError()
38+
{
39+
return $this->error;
40+
}
41+
42+
/**
43+
* @param string $value
44+
* @return bool
45+
*/
46+
protected function matchValue($value)
47+
{
48+
try {
49+
return false !== filter_var($value, FILTER_VALIDATE_EMAIL);
50+
} catch (\Exception $e) {
51+
return false;
52+
}
53+
}
54+
}

src/Coduo/PHPMatcher/Parser/ExpanderInitializer.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class ExpanderInitializer
1818
"startsWith" => "Coduo\\PHPMatcher\\Matcher\\Pattern\\Expander\\StartsWith",
1919
"endsWith" => "Coduo\\PHPMatcher\\Matcher\\Pattern\\Expander\\EndsWith",
2020
"notEmpty" => "Coduo\\PHPMatcher\\Matcher\\Pattern\\Expander\\NotEmpty",
21+
"isDateTime" => "Coduo\\PHPMatcher\\Matcher\\Pattern\\Expander\\IsDateTime",
22+
"isEmail" => "Coduo\\PHPMatcher\\Matcher\\Pattern\\Expander\\IsEmail",
2123
"lowerThan" => "Coduo\\PHPMatcher\\Matcher\\Pattern\\Expander\\LowerThan",
2224
"greaterThan" => "Coduo\\PHPMatcher\\Matcher\\Pattern\\Expander\\GreaterThan",
2325
"inArray" => "Coduo\\PHPMatcher\\Matcher\\Pattern\\Expander\\InArray",
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace Coduo\PHPMatcher\Tests\Matcher\Pattern\Expander;
4+
5+
use Coduo\PHPMatcher\Matcher;
6+
use Coduo\PHPMatcher\Matcher\Pattern\Expander\IsDateTime;
7+
8+
class IsDateTimeTest extends \PHPUnit_Framework_TestCase
9+
{
10+
/**
11+
* @dataProvider examplesDatesProvider
12+
*/
13+
public function test_dates($date, $expectedResult)
14+
{
15+
$expander = new IsDateTime();
16+
$this->assertEquals($expectedResult, $expander->match($date));
17+
}
18+
19+
public static function examplesDatesProvider()
20+
{
21+
return array(
22+
array("201-20-44", false),
23+
array("2012-10-11", true),
24+
array("invalid", false),
25+
array("Monday, 15-Aug-2005 15:52:01 UTC", true)
26+
);
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace Coduo\PHPMatcher\Tests\Matcher\Pattern\Expander;
4+
5+
use Coduo\PHPMatcher\Matcher;
6+
use Coduo\PHPMatcher\Matcher\Pattern\Expander\IsEmail;
7+
8+
class IsEmailTest extends \PHPUnit_Framework_TestCase
9+
{
10+
/**
11+
* @dataProvider examplesEmailsProvider
12+
*/
13+
public function test_emails($email, $expectedResult)
14+
{
15+
$expander = new IsEmail();
16+
$this->assertEquals($expectedResult, $expander->match($email));
17+
}
18+
19+
public static function examplesEmailsProvider()
20+
{
21+
return array(
22+
array("[email protected]", true),
23+
array("[email protected]", true),
24+
array("[email protected]", false),
25+
array("2222----###@domain.co", true)
26+
);
27+
}
28+
}

0 commit comments

Comments
 (0)