<?php
/**
* @package s9e\TextFormatter
* @copyright Copyright (c) 2010-2021 The s9e authors
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
namespace s9e\TextFormatter\Parser\AttributeFilters;
use s9e\TextFormatter\Parser\Logger;
class NumericFilter
{
/**
* Filter a float value
*
* @param string $attrValue Original value
* @return mixed Filtered value, or FALSE if invalid
*/
public static function filterFloat($attrValue)
{
return filter_var($attrValue, FILTER_VALIDATE_FLOAT);
}
/**
* Filter an int value
*
* @param string $attrValue Original value
* @return mixed Filtered value, or FALSE if invalid
*/
public static function filterInt($attrValue)
{
return filter_var($attrValue, FILTER_VALIDATE_INT);
}
/**
* Filter a range value
*
* @param string $attrValue Original value
* @param integer $min Minimum value
* @param integer $max Maximum value
* @param Logger $logger Parser's Logger instance
* @return mixed Filtered value, or FALSE if invalid
*/
public static function filterRange($attrValue, $min, $max, Logger $logger = null)
{
$attrValue = filter_var($attrValue, FILTER_VALIDATE_INT);
if ($attrValue === false)
{
return false;
}
if ($attrValue < $min)
{
if (isset($logger))
{
$logger->warn(
'Value outside of range, adjusted up to min value',
[
'attrValue' => $attrValue,
'min' => $min,
'max' => $max
]
);
}
return $min;
}
if ($attrValue > $max)
{
if (isset($logger))
{
$logger->warn(
'Value outside of range, adjusted down to max value',
[
'attrValue' => $attrValue,
'min' => $min,
'max' => $max
]
);
}
return $max;
}
return $attrValue;
}
/**
* Filter a uint value
*
* @param string $attrValue Original value
* @return mixed Filtered value, or FALSE if invalid
*/
public static function filterUint($attrValue)
{
return filter_var($attrValue, FILTER_VALIDATE_INT, [
'options' => ['min_range' => 0]
]);
}
}