dsentker / numeric-range-parser
一个用于读取索引范围的解析器,例如页码
0.1.2
2024-03-12 15:12 UTC
Requires
- php: >=8.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.51
- phpunit/phpunit: *
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上跟踪。
如果您有任何一般性问题或想实现某个功能,欢迎您合作。