原始电话号码泄露会毁掉你的一整天
Source: Dev.to
Introduction
对电话号码进行掩码看似很简单……直到你遇到国际格式、奇怪的输入,以及那条包含 +62 (812)-3456..7890 的 QA 测试。这款 TypeScript 电话掩码工具就是为这种现实而生,遵循 GDPR 与数据保护标准,不做地区假设,接受字符串或数字,并能安全地规范化你抛来的任何混乱。没有国家规则,没有电话元数据数据库——只有可预测的掩码,不会和你作对。
Default behavior
默认行为故意保持平淡(以好的方式):掩码除最后 4 位之外的所有数字。
maskPhone('1234567890')
// ******7890
maskPhone('+62 812 3456 7890')
// +*********7890
你无需进行任何配置即可得到合理的输出——这正是此类工具应有的表现。
Configurable options
当你需要更细粒度的控制时,API 仍保持扁平且易读。
Show a few digits at the front
maskPhone('628123456789', { showFirst: 3, showLast: 2 })
// 628*******89
Preserve formatting for UI display
maskPhone('+1 (555) 123-4567', { preserveFormat: true })
// +* (***) ***-4567
没有魔法,也没有意外。函数只会按选项所述执行——不多,也不少。
Custom mask
针对“我知道自己在干什么”的用户,customMask 可以覆盖一切,并让你对每个字符拥有完整控制权。
maskPhone('1234567890', {
customMask: (char, idx) => (idx % 2 === 0 ? '*' : char),
})
// *2*4*6*8*0
Under the hood
代码保持极简、无依赖,并且防御性极强:
null值不会导致崩溃。- 荒唐的选项值不会泄露数据。
- 超长输入不会把你的日志撑爆。
这正是那种可以直接丢进 UI、分析或日志系统,然后再也不必担心的工具——这也是对掩码代码的最高赞誉。
Installation
代码托管在 GitHub,完全开源,零戏剧性:
使用你喜欢的包管理器进行安装:
npm install @ekaone/mask-phone
# or
yarn add @ekaone/mask-phone
# or
pnpm add @ekaone/mask-phone
就这么简单。没有后置安装仪式,没有对等依赖的惊喜,也没有“为什么这么大 3 MB?”的困扰。