Neos\Flow\I18n\Parser\NumberParser::doParsingInStrictMode PHP 메소드

doParsingInStrictMode() 보호된 메소드

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
리턴 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;
    }