Passed
Pull Request — master (#55)
by Tim
01:56
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  = '/^
28
        -?
29
        ([1-9][0-9]*|[0-9]{4})
30
        -
31
        (
32
            ((0(1|3|5|7|8)|1(0|2))-(0[1-9]|(1|2)[0-9]|3[0-1]))
33
            |((0(4|6|9)|11)-(0[1-9]|(1|2)[0-9]|30))
34
            |(02-(0[1-9]|(1|2)[0-9]))
35
        )
36
        (
37
            ([+-]
38
                ([0-1][0-9]|2[0-4])
39
                :
40
                (0[0-9]|[1-5][0-9])
41
            )|Z
42
        )?$/Dx';
43
44
45
    /**
46
     * @param string $value
47
     * @param string $message
48
     */
49
    protected static function validDate(string $value, string $message = ''): void
50
    {
51
        parent::regex(
52
            $value,
53
            self::$date_regex,
54
            $message ?: '%s is not a valid xs:date',
55
            InvalidArgumentException::class,
56
        );
57
    }
58
}
59