Completed
Push — master ( b02172...301171 )
by
unknown
16:08
created

RegularExpressionValidator   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 45
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 20
dl 0
loc 45
rs 10
c 0
b 0
f 0
wmc 7

2 Methods

Rating   Name   Duplication   Size   Complexity  
A getErrorMessage() 0 14 4
A isValid() 0 12 3
1
<?php
2
3
/*
4
 * This file is part of the TYPO3 CMS project.
5
 *
6
 * It is free software; you can redistribute it and/or modify it under
7
 * the terms of the GNU General Public License, either version 2
8
 * of the License, or any later version.
9
 *
10
 * For the full copyright and license information, please read the
11
 * LICENSE.txt file that was distributed with this source code.
12
 *
13
 * The TYPO3 project - inspiring people to share!
14
 */
15
16
namespace TYPO3\CMS\Extbase\Validation\Validator;
17
18
use TYPO3\CMS\Extbase\Validation\Exception\InvalidValidationOptionsException;
19
20
/**
21
 * Validator based on regular expressions.
22
 */
23
class RegularExpressionValidator extends AbstractValidator
24
{
25
    /**
26
     * @var array
27
     */
28
    protected $supportedOptions = [
29
        'regularExpression' => ['', 'The regular expression to use for validation, used as given', 'string', true],
30
        'errorMessage' => ['', 'Error Message to show when validation fails', 'string', false],
31
    ];
32
33
    /**
34
     * Checks if the given value matches the specified regular expression.
35
     *
36
     * @param mixed $value The value that should be validated
37
     * @throws \TYPO3\CMS\Extbase\Validation\Exception\InvalidValidationOptionsException
38
     */
39
    public function isValid($value)
40
    {
41
        $result = preg_match($this->options['regularExpression'], $value);
42
        if ($result === 0) {
43
            $errorMessage = $this->getErrorMessage();
44
            $this->addError(
45
                $errorMessage,
46
                1221565130
47
            );
48
        }
49
        if ($result === false) {
50
            throw new InvalidValidationOptionsException('regularExpression "' . $this->options['regularExpression'] . '" in RegularExpressionValidator contained an error.', 1298273089);
51
        }
52
    }
53
54
    protected function getErrorMessage(): string
55
    {
56
        $errorMessage = $this->options['errorMessage'] ?? '';
57
        // if custom message is no locallang reference
58
        if ($errorMessage && strpos($errorMessage, 'LLL') === false) {
59
            return $errorMessage;
60
        }
61
        if (!$errorMessage) {
62
            // fallback to default message
63
            $errorMessage = 'validator.regularexpression.nomatch';
64
        }
65
        return $this->translateErrorMessage(
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->translateE...rrorMessage, 'extbase') could return the type null which is incompatible with the type-hinted return string. Consider adding an additional type-check to rule them out.
Loading history...
66
            $errorMessage,
67
            'extbase'
68
        );
69
    }
70
}
71