1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| <?php
|
| declare(strict_types=1);
|
| namespace App\Enum;
|
| use App\Model\Isbn;
|
| enum LabelType: string {
| case TEXT = 'text';
| case ISBN = 'isbn';
| case ISSN = 'issn';
|
| /**
| * Brings a value to its stored form; an ISBN-10 becomes an ISBN-13. A value that cannot be
| * normalized is returned as it is, and isValid() then rejects it.
| */
| public function normalize(string $value): string {
| $compact = strtoupper(str_replace(['-', ' '], '', $value));
|
| return match ($this) {
| self::TEXT => trim($value),
| self::ISBN => Isbn::toIsbn13($compact) ?? $compact,
| self::ISSN => $compact,
| };
| }
|
| public function isValid(string $normalizedValue): bool {
| return match ($this) {
| self::TEXT => $normalizedValue !== '',
| self::ISBN => $normalizedValue === Isbn::toIsbn13($normalizedValue) && \strlen($normalizedValue) === 13,
| self::ISSN => preg_match('/^(\d{7}[\dX]|\d{13})$/', $normalizedValue) === 1,
| };
| }
| }
|
|