decodelabs / dictum
文本格式化工具
v0.6.6
2024-09-06 17:30 UTC
Requires
- php: ^8.1
- decodelabs/cosmos: ^0.2
- decodelabs/exceptional: ^0.4
- decodelabs/fluidity: ^0.3
- decodelabs/glitch-support: ^0.4
- decodelabs/veneer: ^0.11.6
- symfony/polyfill-mbstring: ^1.7
Requires (Dev)
- decodelabs/phpstan-decodelabs: ^0.6
- nesbot/carbon: ^2|^3
This package is auto-updated.
Last update: 2024-09-06 17:31:15 UTC
README
PHP 文本格式化工具
Dictum 提供了一组常用的文本解析和处理功能。
关注 DecodeLabs 博客获取最新消息和更新 DecodeLabs blog.
安装
通过 Composer 安装
composer require decodelabs/dictum
使用方法
导入
Dictum 使用 Veneer 来在 DecodeLabs\Dictum
下提供一个统一的前端。您可以通过这个静态前端访问所有主要功能,而不会影响测试和依赖注入。
格式化工具
Dictum 的主要 Veneer 前端公开了一系列可预测的文本/键格式化工具,可用于快速准备字符串以进行特定操作。
use DecodeLabs\Dictum; echo Dictum::name('geoff-randomName'); // Geoff Random Name echo Dictum::firstName('geoff-randomName'); // Geoff echo Dictum::initials('geoff-randomName'); // GRN echo Dictum::initialsAndSurname('geoff-randomName'); // GR Name echo Dictum::initialMiddleNames('geoff-randomName'); // Geoff R Name echo Dictum::consonants('here\'s a Random-string of text'); // hr's Rndm-strng f txt echo Dictum::label('here\'s a Random-string of text'); // Here's a random string of text echo Dictum::id('here\'s a Random-string of text'); // HeresARandomStringOfText echo Dictum::camel('here\'s a Random-string of text'); // heresARandomStringOfText echo Dictum::constant('here\'s a Random-string of text'); // HERE_S_A_RANDOM_STRING_OF_TEXT echo Dictum::slug('here\'s a Random-string of text / other stuff'); // heres-a-random-string-of-text-other-stuff echo Dictum::pathSlug('here\'s a Random-string of text / other stuff'); // heres-a-random-string-of-text/other-stuff echo Dictum::actionSlug('here\'s a Random-string of text / other stuff'); // here's-a-random-string-of-text-/-other-stuff echo Dictum::fileName('here\'s a Random-string of text / other stuff'); // here's-a-Random-string-of-text-_-other-stuff echo Dictum::shorten('here\'s a Random-string of text / other stuff', 10); // here's a… echo Dictum::numericToAlpha(23345452); // aybfra echo Dictum::alphaToNumeric('aybfra') // 23345452 echo Dictum::toBoolean('yes') ? 'true' : 'false'; // true
文本
上述格式化工具主要使用 Text
类来处理提供的字符串。这个类以不可变集合格式公开了一套全面的针对多字节字符串的操作功能。
例如,上述 id()
方法定义为
echo (new Text($id)) ->toUtf8() ->toAscii() ->regexReplace('([^ ])([A-Z])', '\\1 \\2') ->replace(['-', '.', '+'], ' ') ->regexReplace('[^a-zA-Z0-9_ ]', '') ->toTitleCase() ->replace(' ', '') ->__toString();
注意,正则表达式基于 mb_ereg 函数,因此其模式中不使用分隔符。
插件
Dictum 提供了定义本地化格式化插件的通用接口,这些插件可以由不同的输出生成器实现。
目前,Time 和 Number 可用,定义了格式化日期和各种数字形式的可预测方法。
Dictum 提供了这些接口的纯文本版本
use DecodeLabs\Dictum; // Custom format Dictum::$time->format('now', 'd/m/Y', 'Europe/London'); // Locale format // When timezone is true it is fetched from Cosmos::$timezone Dictum::$time->locale('now', 'long', 'long', true); // Locale shortcuts Dictum::$time->dateTime('tomorrow'); // medium Dictum::$time->longTime('yesterday'); Dictum::$time->shortDate('yesterday'); // ...etc // Intervals Dictum::$time->since('yesterday'); // 1 day ago Dictum::$time->until('tomorrow'); // 1 day from now Dictum::$time->sinceAbs('yesterday'); // 1 day Dictum::$time->untilAbs('yesterday'); // -1 day Dictum::$time->between('yesterday', 'tomorrow'); // 1 day // Numbers Dictum::$number->format(16.5, 'px'); // 16.5 px Dictum::$number->format(16.5, 'px', 'de'); // 16,5 px Dictum::$number->decimal(16.534643, 2); // 16.53 Dictum::$number->currency(16.534643, 'GBP'); // £16.53 Dictum::$number->percent(16.534643, 50, 2); // 33.07% Dictum::$number->scientific(16.534643); // 1.6534643E1 Dictum::$number->spellout(16.534643); // sixteen point five three four six four three Dictum::$number->ordinal(16.534643); // 17th Dictum::$number->diff(16.534643); // ⬆ 16.535 Dictum::$number->fileSize(16534643); // 15.77 MiB Dictum::$number->fileSizeDec(16534643); // 16.53 MB
有关这些接口的等效 HTML 实现,请参阅 Tagged.
许可
Dictum 采用 MIT 许可证。有关完整的许可证文本,请参阅 LICENSE.