dakujem / shorts
一个灵活的工具,用于缩短或限制个人姓名长度,或创建首字母。
0.1.1
2019-10-13 16:58 UTC
Requires
- php: >=7.1
Requires (Dev)
- nette/tester: ^2.3
This package is auto-updated.
Last update: 2024-09-06 22:36:07 UTC
README
使用此工具缩短或限制个人姓名长度,或使用首字母代替全名。
支持Unicode / UTF-8姓名。
- 限制/限制姓名长度(旨在尽可能保持姓名可读性)
| John Roland Reuel Tolkien | | --> John R. Reuel Tolkien | # last name priority | -----> John R. R. Tolkien | | -------> J. R. R. Tolkien | | ---------> J.R.R. Tolkien | | -----------> John Tolkien | | ---------------> J.R.R.T. | | -------------------> JRRT | | ---------------------> JT | | | | John Roland Reuel Tolkien | | John R. R. Tolkien <----- | # first name priority | John R. R. T. <---------- | | John R.R.T. <------------ | | J.R.R.T. <--------------- | | JRRT <------------------- | | JT <--------------------- |
- 使用姓名部分的首字母缩短姓名(无长度限制)
John Roland Reuel Tolkien: - J. R. R. Tolkien - John R. R. T.
- 创建首字母(可配置分隔符)
- JRRT - J. R. R. T.
我花了超过60分钟仍然找不到任何合理的解决方案,所以我决定在不到60分钟内编写代码。我多么愚蠢...
待办/进行中
功能和公共接口已经到位。代码仍然很丑,别担心。🙊
我还在考虑如何使自定义姓名解析器能够动态提供或通过配置提供,以便轻松支持特殊情况(如复合姓名)。请耐心等待。🐻
支持:
- Unicode姓名
- 任意长度
以下内容(尚未)支持
- 复合姓氏(抱歉,这可能在以后提供)
- 非单词字符将会丢失
Bull, John
- 学术和其他头衔
Bc. Foo Bar, Dr.Sc.
John Bull, Sr.
- 除拉丁字母以外的其他书写系统(可能工作,但我没有测试它们)
您需要在通过缩写器之前/之后自己处理这些。
用法
限制(上限)姓名长度
Shorts::cap('Pablo Escobar', 10); // "P. Escobar" Shorts::cap('Pablo Escobar', 2); // "PE" Shorts::cap('John Ronald Reuel Tolkien', 20); // "John R. R. Tolkien" Shorts::cap('John Ronald Reuel Tolkien', 16); // "J. R. R. Tolkien" Shorts::cap('John Ronald Reuel Tolkien', 15); // "J.R.R. Tolkien" Shorts::cap('John Ronald Reuel Tolkien', 8); // "J.R.R.T." Shorts::cap('John Ronald Reuel Tolkien', 4); // "JRRT"
上述操作将尝试保持姓氏可读,除非限制过于严格。
还有逆版本,将尝试保持名字可读。
Shorts::cap('Pablo Escobar', 10, Shorts::FIRST_NAME); // "Pablo E."
使用首字母缩短姓名(除了姓氏)
Shorts::shrink('John Ronald Reuel Tolkien'); // "J. R. R. Tolkien" Shorts::shrink('Hugo Ventil'); // "H. Ventil"
使用首字母缩短姓名(除了名字)
Shorts::shrink('John Ronald Reuel Tolkien', Shorts::FIRST_NAME); // "John R. R. T." Shorts::shrink('Hugo Ventil', Shorts::FIRST_NAME); // "Hugo V."
创建“简短”的首字母
Shorts::initials('John Ronald Reuel Tolkien'); // "JRRT" Shorts::initials('Hugo Ventil'); // "HV"
...或“较长”版本
Shorts::initials('John Ronald Reuel Tolkien', '.', ' '); // "J. R. R. T." Shorts::initials('Hugo Ventil', '.', ' '); // "H. V."
每个静态方法都有一个非静态对应方法
Shorts::i()->limit( ... ); // Shorts::cap( ... ) Shorts::i()->reduce( ... ); // Shorts::shrink( ... ) Shorts::i()->toInitials( ... ); // Shorts::initials( ... )
Shorts还提供了为每个方法创建预配置格式化器的功能
Shorts::i()->limiter( ... ) Shorts::i()->reducer( ... ) Shorts::i()->initialsFormatter( ... )
这些可以使用如下方式
$fmt = Shorts::i()->limiter(20); // will limit any input to 20 chars $fmt('Foo Bar'); // this is equivalent to Shorts::cap('Foo Bar', 20)
请注意,格式化器在定义模板语言(如Twig或Latte)的过滤器时非常有用。
测试
$
composer test
贡献
...始终欢迎。很多时候,指出作者没有考虑过或遇到的使用案例非常有用。
可能的未来功能
- 包含一个名称解析器来拆分姓名
- https://github.com/joshfraser/PHP-Name-Parser
- https://github.com/theiconic/name-parser
- 实际上,我打算提供一种使用您自己的explode/implode函数的可能性,以便使工具尽可能灵活