min = 3; $this->max = 4; if (is_numeric($params)) { $params = ['min' => $params, 'max' => $params]; } elseif (is_array($params)) { if (count($params) === 2 && isset($params[0]) && isset($params[1])) { $params = ['min' => min($params), 'max' => max($params)]; } elseif (count($params) === 1 && isset($params[0])) { $params = ['min' => $params[0], 'max' => $params[0]]; } } return $params; } public function check(&$value) { $version = $this->toString($value, true); $pattern = function ($limit) { return '/^' . str_repeat('([0-9]+)\.', $limit - 1) . '([0-9]+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+)?$/'; }; foreach (range($this->min, $this->max) as $limit) { if (preg_match($pattern($limit), $version)) { return true; } } return false; } /** * Default message * @return string */ public function defaultMessage(): string { return _t('error', 'The [attribute] must be a valid version number'); } }