Passed
Pull Request — master (#55)
by Tim
01:49
created

DateTrait::validDate()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 5
c 1
b 0
f 0
dl 0
loc 7
rs 10
cc 2
nc 1
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace SimpleSAML\XML\Assert;
6
7
use InvalidArgumentException;
8
9
/**
10
 * @package simplesamlphp/xml-common
11
 */
12
trait DateTrait
13
{
14
    /**
15
     * The ·lexical space· of date consists of finite-length sequences of characters of the form:
16
     * '-'? yyyy '-' mm '-' dd zzzzzz?
17
     *
18
     * where the date and optional timezone are represented exactly the same way as they are for dateTime.
19
     * The first moment of the interval is that represented by:
20
     * '-' yyyy '-' mm '-' dd 'T00:00:00' zzzzzz?
21
     *
22
     * and the least upper bound of the interval is the timeline point represented (noncanonically) by:
23
     * '-' yyyy '-' mm '-' dd 'T24:00:00' zzzzzz?.
24
     *
25
     * @var string
26
     */
27
    private static string $date_regex  = '/^-?([1-9][0-9]*|[0-9]{4})-(((0(1|3|5|7|8)|1(0|2))-(0[1-9]|(1|2)[0-9]|3[0-1]))|((0(4|6|9)|11)-(0[1-9]|(1|2)[0-9]|30))|(02-(0[1-9]|(1|2)[0-9])))((\+|-)([0-1][0-9]|2[0-4]):(0[0-9]|[1-5][0-9])|Z)?$/Di';
28
29
30
    /**
31
     * @param string $value
32
     * @param string $message
33
     */
34
    protected static function validDate(string $value, string $message = ''): void
35
    {
36
        parent::regex(
37
            $value,
38
            self::$date_regex,
39
            $message ?: '%s is not a valid xs:date',
40
            InvalidArgumentException::class,
41
        );
42
    }
43
}
44