原始电话号码泄露会毁掉你的一整天

发布: (2026年2月4日 GMT+8 12:30)
3 min read
原文: Dev.to

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,完全开源,零戏剧性:

GitHub repository

使用你喜欢的包管理器进行安装:

npm install @ekaone/mask-phone
# or
yarn add @ekaone/mask-phone
# or
pnpm add @ekaone/mask-phone

就这么简单。没有后置安装仪式,没有对等依赖的惊喜,也没有“为什么这么大 3 MB?”的困扰。

Back to Blog

相关文章

阅读更多 »

Next.js ConnectRPC 代理模式

封面图像:Next.js ConnectRPC Proxy Pattern https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-...