dsentker/numeric-range-parser

一个用于读取索引范围的解析器,例如页码

0.1.2 2024-03-12 15:12 UTC

This package is auto-updated.

Last update: 2024-09-19 12:22:20 UTC


README

这是一个PHP库,它提供从给定输入字符串中解析数字范围的功能。该库适用于需要选择特定页码或获取自定义项目范围的用户输入。

安装

使用 Composer 安装

composer require dsentker/numeric-range-parser

用法

$parser = new DefaultNumericRangeParser();
$result = $parser->parse('1-3;5');
dump($result->toNormalizedArray()); // [1, 2, 3, 5]


// $result is traversable, iterating over indexes is possible too
foreach ($result as $index) {
    echo $index . PHP_EOL;
}

由于 $result 是一个 AppendIterator 实例,因此如果需要,可以追加更多索引。此外,getIteratorIndex() 方法返回当前块(块由分号分隔)的索引

$parser = new DefaultNumericRangeParser();
$result = $parser->parse('4-6; 10'); // two blocks defined here

$result->append(new \ArrayIterator([1-2])); // another block here

foreach ($result as $index) {
    // $result->getIteratorIndex() will count up to 2 (0,1,2)
    printf("Block #%d: Index: #%d", $result->getIteratorIndex(), $result->current());
}

配置选项

__construct(string $rangeSeparator = '-', string $blockSeparator = ';')

构造函数允许您设置自定义的范围和块分隔符。默认情况下,范围分隔符为 '-',块分隔符为 ';'

$instance = new \DSentker\DefaultNumericRangeParser('..', '/');
$result = $instance->parse('1..4 / 6..10');

严格解析

尽管 DefaultNumericRangeParser 在用户输入上相对宽松,但 StrictNumericRangeParser 解析器更严格。如果输入不正确,将抛出 RangeException

$default = new \DSentker\DefaultNumericRangeParser();
$strict = new \DSentker\StrictNumericRangeParser();

$default->parse('10-8'); // No error
$strict->parse('10-8'); // First index is greater than second, RangeException is thrown

$default->parse('8-10;;11'); // No error
$strict->parse('8-10;;11'); // Missing range, RangeException is thrown

$default->parse('8a;10;12'); // No error
$strict->parse('8a;10;12'); // Invalid character, RangeException is thrown

测试

使用 PHPUnit

./vendor/bin/phpunit

提交错误和功能请求

错误和功能请求在GitHub上跟踪。

如果您有任何一般性问题或想实现某个功能,欢迎您合作。