From 035ec85efd9641956fe24d87dac702f5b67c76cd Mon Sep 17 00:00:00 2001 From: Utopia Date: Fri, 24 May 2024 14:20:21 +0800 Subject: [PATCH] feat: new function - desensitizePhone --- README.md | 1 + packages/core/src/stringDesensitize.test.ts | 10 ++++++++-- packages/core/src/stringDesensitize.ts | 19 +++++++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2ff13b7..448de83 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,7 @@ pnpm add @utopia-utils/dom * formatterPhoneNumber: 手机号格式化。[source](https://github.com/GreatAuk/utopia-utils/blob/main/packages/core/src/stringFormatter.ts) * formatterIdCard: 身份证呈格式化。[source](https://github.com/GreatAuk/utopia-utils/blob/main/packages/core/src/stringFormatter.ts) * desensitizeName: 姓名脱敏。[source](https://github.com/GreatAuk/utopia-utils/blob/main/packages/core/src/stringDesensitize.ts) +* desensitizePhone: 手机号脱敏。[source](https://github.com/GreatAuk/utopia-utils/blob/main/packages/core/src/stringDesensitize.ts) ### 类型判断 diff --git a/packages/core/src/stringDesensitize.test.ts b/packages/core/src/stringDesensitize.test.ts index 529c0d3..caa024b 100644 --- a/packages/core/src/stringDesensitize.test.ts +++ b/packages/core/src/stringDesensitize.test.ts @@ -1,6 +1,6 @@ -import { describe, expect, vi } from 'vitest' +import { describe, expect, it } from 'vitest' -import { desensitizeName } from './stringDesensitize' +import { desensitizeName, desensitizePhone } from './stringDesensitize' describe('stringDesensitize', () => { it('desensitizeName', () => { @@ -12,4 +12,10 @@ describe('stringDesensitize', () => { expect(desensitizeName('张二三丰')).toMatchInlineSnapshot(`"张**丰"`) expect(desensitizeName('张二三四丰')).toMatchInlineSnapshot(`"张***丰"`) }) + + it('desensitizePhone', () => { + expect(desensitizePhone()).toBeUndefined() + expect(desensitizePhone('')).toBe('') + expect(desensitizePhone('12345678910')).toMatchInlineSnapshot(`"123****8910"`) + }) }) diff --git a/packages/core/src/stringDesensitize.ts b/packages/core/src/stringDesensitize.ts index 20ad726..441eda9 100644 --- a/packages/core/src/stringDesensitize.ts +++ b/packages/core/src/stringDesensitize.ts @@ -29,3 +29,22 @@ export function desensitizeName(name?: string) { return name[0] + '*'.repeat(length - 2) + name[length - 1] } + +/** + * Desensitizes a phone number by replacing the middle digits with asterisks. + * @param phone - The phone number to desensitize. + * @returns The desensitized phone number. + * @example + * ```ts + * desensitizePhone('12345678910') // '123****8910' + * desensitizePhone('') // '' + * desensitizePhone(undefined) // undefined + * ``` + * @linkcode https://github.com/GreatAuk/utopia-utils/blob/main/packages/core/src/stringDesensitize.ts + */ +export function desensitizePhone(phone?: string) { + if (!isString(phone)) + return phone + + return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2') +}