# 通过拼音首字母缩写搜索 iPhone 联系人（Shortcuts 解）

> 本文公开全文。

原文：https://utgd.net/article/21282

你可以合理怀疑，苹果公司中任何说中文的人，私下里都不会使用 iPhone。毕竟，就连通过拼音首字母缩写＊搜索联系人这点小事，iPhone 将近二十年都没做好。

＊“首字母”和“缩写”是冗余，但我为了让文章被更多不同语言习惯的读者搜到，完全不介意通篇病句，甚至以此为荣。

加之 iPhone 输入法并不记忆联系人姓名，基本上，每次找人，我免不了打开通讯录软件一页一页往下翻——遇到名字里带生僻字的家伙，手动翻找成了唯一选择。

相较之下，分明不是通讯录软件的微信，却在本土化上深扎稳固，早就支持通过首字母缩写找人。你可以用“qmq”轻松找到“覃某玘”这种同时出现多音字和生僻字的姓名。

工作这几年，我积累了数量可观的手机通讯录联系人，不得不面对搜索难的历史问题。万幸，有过《让 iPhone 通讯录中的中文联系人按拼音顺序显示》的经验后，我很快意识到首字母缩写不过是另一项元数据，完全可以自行添加。

- Shortcuts 动作下载

- GitHub

据我所知，早就有一些第三方工具，但一方面要钱，更要命的是，我一点也不想交出通讯录信息，试想一下开发者成功获取我的个人信息后，会露出怎样的嘴脸：Minja 律师认识B领导和C院长？还有对方的私人电话？喔喔很有趣哦……

好在这些第三方工具，也不过是往原生通讯录里备注首字母缩写信息。此事完全可以交给原生软件：Shortcuts。在研究外文环境下的中文按姓氏排序时，我发现可以通过中英往返翻译获得中文姓名的拼音，而翻译引擎从 Microsoft 切到苹果自家服务后＊，姓名翻译质量明显提升，本方案已万事俱备。

＊这意味着本文动作可能必须联网使用，才能正常调用翻译引擎。

只欠东风：如何获得姓名拼音的首字母？例如，当我已经可以从“吴细妹”获得“Wu Ximei”时，如何进一步得到“wxm”（先不过问大小写）？我首先想到借用 Shell Script 或 Python 引入第三方库，但转念间就放弃，因为这些方案依赖电脑，更像是命令行脚本套壳，基本别指望分享给不谙计算机技术的朋友。更通用的答案逐渐浮出水面：正则表达式。

暂不考虑名字带符号或空格的少数民族同胞，一般的中文名字，多为“张三”“李小龙”“诸葛亮”或“诸葛孔明”等形式，即二字到四字不等，而每个字的拼音，要么是辅音加元音，要么是单一个元音。

在技术上，单字名字和“诸葛”这样的复姓暗示了表达式需要对称，即姓氏和名字可作同一考量，即均需包容“A”和“AB”的形式，最终组合起来覆盖“A C”、“A CD”、“AB C”和“AB CD”四种主要的中文姓名。

再考虑到多个字母的辅音也仅取第一个，提取首字母缩写就成了字符变换游戏，理论上，下面的组合即覆盖多数汉字单字的拼音：

```
^([a-z])(?:hiang|huang|hang|hueng|heng|hing|hiong|hong|huai|hiao|hian|hiou|huei|huan|hüan|huen|iang|uang|hia|hua|huo|hie|hue|hüe|her|hai|hei|hui|hao|hou|hiu|han|hen|hun|hin|hün|ang|ueng|eng|ing|iong|ong|uai|iao|ian|iou|uei|uan|üan|uen|ha|ho|he|hi|hu|hü|ia|ua|uo|ie|ue|üe|er|ai|ei|ui|ao|ou|iu|an|en|un|in|ün|a|o|e|i|u|ü)?
```

注意，我仅仅根据音标表生成了可能的组合，但没有兴趣一一核查每一例是否可能存在，但不存在的发音也应该不影响匹配，因为它们压根不会出现。

随后，我从联系人元数据中挑选了一个不常用字段“Phonatic Middle Name”，将首字母缩写填入其中，旋可在通讯录或 Spotlight 中通过首字母查找联系人。

运行 Shortcuts 动作后，可能要等待 Spotlight 重建索引，视联系人数量差异，大约在几分钟可尝试搜索。

---

[前往标准阅读页](https://utgd.net/article/21282?audience=web)
