allowedSchemes = $allowedSchemes; } /** * Get Description * * Returns validator description * * @return string */ public function getDescription(): string { if (!empty($this->allowedSchemes)) { return 'Value must be a valid URL with following schemes (' . \implode(', ', $this->allowedSchemes) . ')'; } return 'Value must be a valid URL'; } /** * Is valid * * Validation will pass when $value is valid URL. * * @param mixed $value * @return bool */ public function isValid($value): bool { $sanitizedURL = ''; foreach (str_split($value) as $character) { $sanitizedURL .= (ord($character) > 127) ? rawurlencode($character) : $character; } if (\filter_var($sanitizedURL, FILTER_VALIDATE_URL) === false) { return false; } if (!empty($this->allowedSchemes) && !\in_array(\parse_url($sanitizedURL, PHP_URL_SCHEME), $this->allowedSchemes)) { return false; } return true; } /** * Is array * * Function will return true if object is array. * * @return bool */ public function isArray(): bool { return false; } /** * Get Type * * Returns validator type. * * @return string */ public function getType(): string { return self::TYPE_STRING; } }