Neos\Flow\I18n\Parser\NumberParser::doParsingInStrictMode PHP Method

doParsingInStrictMode() protected method

In strict mode parser checks all constraints of provided parsed format, and if any of them is not fullfiled, parsing fails (FALSE is returned).
protected doParsingInStrictMode ( string $numberToParse, array $parsedFormat, array $localizedSymbols ) : mixed
$numberToParse string Number to be parsed
$parsedFormat array Parsed format (from NumbersReader)
$localizedSymbols array An array with symbols to use
return mixed Parsed float number or FALSE on failure
    protected function doParsingInStrictMode($numberToParse, array $parsedFormat, array $localizedSymbols)
    {
        $numberIsNegative = false;
        if (!empty($parsedFormat['negativePrefix']) && !empty($parsedFormat['negativeSuffix'])) {
            if (Utility::stringBeginsWith($numberToParse, $parsedFormat['negativePrefix']) && Utility::stringEndsWith($numberToParse, $parsedFormat['negativeSuffix'])) {
                $numberToParse = substr($numberToParse, strlen($parsedFormat['negativePrefix']), -strlen($parsedFormat['negativeSuffix']));
                $numberIsNegative = true;
            }
        } elseif (!empty($parsedFormat['negativePrefix']) && Utility::stringBeginsWith($numberToParse, $parsedFormat['negativePrefix'])) {
            $numberToParse = substr($numberToParse, strlen($parsedFormat['negativePrefix']));
            $numberIsNegative = true;
        } elseif (!empty($parsedFormat['negativeSuffix']) && Utility::stringEndsWith($numberToParse, $parsedFormat['negativeSuffix'])) {
            $numberToParse = substr($numberToParse, 0, -strlen($parsedFormat['negativeSuffix']));
            $numberIsNegative = true;
        }
        if (!$numberIsNegative) {
            if (!empty($parsedFormat['positivePrefix']) && !empty($parsedFormat['positiveSuffix'])) {
                if (Utility::stringBeginsWith($numberToParse, $parsedFormat['positivePrefix']) && Utility::stringEndsWith($numberToParse, $parsedFormat['positiveSuffix'])) {
                    $numberToParse = substr($numberToParse, strlen($parsedFormat['positivePrefix']), -strlen($parsedFormat['positiveSuffix']));
                } else {
                    return false;
                }
            } elseif (!empty($parsedFormat['positivePrefix'])) {
                if (Utility::stringBeginsWith($numberToParse, $parsedFormat['positivePrefix'])) {
                    $numberToParse = substr($numberToParse, strlen($parsedFormat['positivePrefix']));
                } else {
                    return false;
                }
            } elseif (!empty($parsedFormat['positiveSuffix'])) {
                if (Utility::stringEndsWith($numberToParse, $parsedFormat['positiveSuffix'])) {
                    $numberToParse = substr($numberToParse, 0, -strlen($parsedFormat['positiveSuffix']));
                } else {
                    return false;
                }
            }
        }
        $positionOfDecimalSeparator = strpos($numberToParse, $localizedSymbols['decimal']);
        if ($positionOfDecimalSeparator === false) {
            $numberToParse = str_replace($localizedSymbols['group'], '', $numberToParse);
            if (strlen($numberToParse) < $parsedFormat['minIntegerDigits']) {
                return false;
            } elseif (preg_match(self::PATTERN_MATCH_DIGITS, $numberToParse, $matches) !== 1) {
                return false;
            }
            $integerPart = $numberToParse;
            $decimalPart = false;
        } else {
            if ($positionOfDecimalSeparator === 0 && $positionOfDecimalSeparator === strlen($numberToParse) - 1) {
                return false;
            }
            $numberToParse = str_replace([$localizedSymbols['group'], $localizedSymbols['decimal']], ['', '.'], $numberToParse);
            $positionOfDecimalSeparator = strpos($numberToParse, '.');
            $integerPart = substr($numberToParse, 0, $positionOfDecimalSeparator);
            $decimalPart = substr($numberToParse, $positionOfDecimalSeparator + 1);
        }
        if (strlen($integerPart) < $parsedFormat['minIntegerDigits']) {
            return false;
        } elseif (preg_match(self::PATTERN_MATCH_DIGITS, $integerPart, $matches) !== 1) {
            return false;
        }
        $parsedNumber = (int) $integerPart;
        if ($decimalPart !== false) {
            $countOfDecimalDigits = strlen($decimalPart);
            if ($countOfDecimalDigits < $parsedFormat['minDecimalDigits'] || $countOfDecimalDigits > $parsedFormat['maxDecimalDigits']) {
                return false;
            } elseif (preg_match(self::PATTERN_MATCH_DIGITS, $decimalPart, $matches) !== 1) {
                return false;
            }
            $parsedNumber = (double) ($integerPart . '.' . $decimalPart);
        }
        $parsedNumber /= $parsedFormat['multiplier'];
        if ($parsedFormat['rounding'] !== 0.0 && $parsedNumber - (int) ($parsedNumber / $parsedFormat['rounding']) * $parsedFormat['rounding'] !== 0.0) {
            return false;
        }
        if ($numberIsNegative) {
            $parsedNumber = 0 - $parsedNumber;
        }
        return $parsedNumber;
    }