CloudCastle UnitConvertor

Parser
in package
implements ParserInterface

FinalYes

Разбор строковых величин: «5.5 km», «5,5 км», «-1 h 30 min», «5ft 3in».

Запятая принимается как десятичный разделитель; разделители тысяч не поддерживаются (неотличимы от составных величин). Входная строка ограничена по длине — защита от рассчитанных на исчерпание ресурсов данных.

Table of Contents

Interfaces

ParserInterface
Разбор строкового представления величин.

Constants

MAX_INPUT_LENGTH  : mixed = 256
Максимальная длина входной строки в байтах.
NUMBER_PATTERN  : mixed = '/^([+-]?(?:\d+(?:[.,]\d+)?|[.,]\d+)(?:[eE][+-]...
Числовой токен: знак, целая/дробная часть, экспонента.

Properties

$converter  : Converter

Methods

__construct()  : mixed
parse()  : Quantity
Разбирает строку в величину.
tryParse()  : Quantity|null
Разбор без исключений: null при любой ошибке пакета.
consumeNumberToken()  : float|null
Обрабатывает числовой токен: «5.5» откладывается до единицы, «5.5km» сразу становится компонентом.
toFloat()  : float
Числовой токен в float: запятая — десятичный разделитель.
tokenize()  : array<int, array{0: float, 1: string}>
Разбивает строку на компоненты «число + единица».
trySingle()  : Quantity|null
Быстрый путь «одно число + единица целиком»: поддерживает многословные алиасы («морская миля», «квадратный метр»).

Constants

MAX_INPUT_LENGTH

Максимальная длина входной строки в байтах.

private mixed MAX_INPUT_LENGTH = 256

NUMBER_PATTERN

Числовой токен: знак, целая/дробная часть, экспонента.

private mixed NUMBER_PATTERN = '/^([+-]?(?:\d+(?:[.,]\d+)?|[.,]\d+)(?:[eE][+-]?\d+)?)(.*)$/'

Properties

Methods

parse()

Разбирает строку в величину.

public parse(string $input) : Quantity
Parameters
$input : string
Attributes
#[Override]
Return values
Quantity

tryParse()

Разбор без исключений: null при любой ошибке пакета.

public tryParse(string $input) : Quantity|null
Parameters
$input : string
Attributes
#[Override]
Return values
Quantity|null

consumeNumberToken()

Обрабатывает числовой токен: «5.5» откладывается до единицы, «5.5km» сразу становится компонентом.

private consumeNumberToken(array<int, array{0: float, 1: string}> &$components, float|null $pendingNumber, array<int|string, string> $match, string $input) : float|null
Parameters
$components : array<int, array{0: float, 1: string}>
$pendingNumber : float|null
$match : array<int|string, string>
$input : string
Tags
throws
ParseException

при двух числах подряд

Return values
float|null

toFloat()

Числовой токен в float: запятая — десятичный разделитель.

private toFloat(string $number) : float
Parameters
$number : string
Tags
throws
ParseException

при некорректном числе

Return values
float

tokenize()

Разбивает строку на компоненты «число + единица».

private tokenize(string $input) : array<int, array{0: float, 1: string}>
Parameters
$input : string
Tags
throws
ParseException

при некорректном формате

Return values
array<int, array{0: float, 1: string}>

trySingle()

Быстрый путь «одно число + единица целиком»: поддерживает многословные алиасы («морская миля», «квадратный метр»).

private trySingle(string $input) : Quantity|null
Parameters
$input : string
Return values
Quantity|null
On this page

Search results