dakujem/shorts

一个灵活的工具,用于缩短或限制个人姓名长度,或创建首字母。

0.1.1 2019-10-13 16:58 UTC

This package is auto-updated.

Last update: 2024-09-06 22:36:07 UTC


README

PHP from Packagist Build Status Nature Friendly

使用此工具缩短或限制个人姓名长度,或使用首字母代替全名。
支持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

贡献

...始终欢迎。很多时候,指出作者没有考虑过或遇到的使用案例非常有用。

可能的未来功能