1<?php
2
3namespace dokuwiki\plugin\config\core\Setting;
4
5/**
6 * Class setting_regex
7 */
8class SettingRegex extends SettingString
9{
10    protected $delimiter = '/';    // regex delimiter to be used in testing input
11    protected $pregflags = 'ui';   // regex pattern modifiers to be used in testing input
12
13    /** @inheritdoc */
14    public function update($input)
15    {
16
17        // let parent do basic checks, value, not changed, etc.
18        $local = $this->local;
19        if (!parent::update($input)) return false;
20        $this->local = $local;
21
22        // see if the regex compiles and runs (we don't check for effectiveness)
23        $regex = $this->delimiter . $input . $this->delimiter . $this->pregflags;
24        $lastError = error_get_last();
25        @preg_match($regex, 'testdata');
26        if (preg_last_error() != PREG_NO_ERROR || error_get_last() !== $lastError) {
27            $this->input = $input;
28            $this->error = true;
29            return false;
30        }
31
32        $this->local = $input;
33        return true;
34    }
35}
36