Skip to content

Commit

Permalink
feat: new function - desensitizeName
Browse files Browse the repository at this point in the history
  • Loading branch information
GreatAuk committed May 24, 2024
1 parent b23615b commit 7e87c1e
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 3 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ pnpm add @utopia-utils/dom
* formatterBankCard: 银行卡号格式化。[source](https://github.com/GreatAuk/utopia-utils/blob/main/packages/core/src/stringFormatter.ts)
* 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)

### 类型判断

Expand Down
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export * from './randomString'
export * from './retry'
export * from './sleep'
export * from './sort'
export * from './stringDesensitize'
export * from './stringFormatter'
export * from './union'
export * from './unique'
Expand Down
15 changes: 15 additions & 0 deletions packages/core/src/stringDesensitize.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { describe, expect, vi } from 'vitest'

import { desensitizeName } from './stringDesensitize'

describe('stringDesensitize', () => {
it('desensitizeName', () => {
expect(desensitizeName()).toBeUndefined()
expect(desensitizeName('')).toBe('')
expect(desensitizeName('张')).toBe('张')
expect(desensitizeName('张三')).toMatchInlineSnapshot(`"张*"`)
expect(desensitizeName('张三丰')).toMatchInlineSnapshot(`"张*丰"`)
expect(desensitizeName('张二三丰')).toMatchInlineSnapshot(`"张**丰"`)
expect(desensitizeName('张二三四丰')).toMatchInlineSnapshot(`"张***丰"`)
})
})
31 changes: 31 additions & 0 deletions packages/core/src/stringDesensitize.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { isString } from '@utopia-utils/share'

/**
* Desensitizes a name,
* If the name is not a string, it will be returned as is.
* @param name - The name to be desensitized.
* @returns The desensitized name.
* @example
* ```ts
* desensitizeName('张三') // '张*'
* desensitizeName('张三丰') // '张*丰'
* desensitizeName('张二三丰') // '张**丰'
* desensitizeName('张') // '张'
* desensitizeName(undefined) // undefined
* ```
* @linkcode https://github.com/GreatAuk/utopia-utils/blob/main/packages/core/src/stringDesensitize.ts
*/
export function desensitizeName(name?: string) {
if (!isString(name))
return name

const length = name.length

if (length < 2)
return name

if (length === 2)
return `${name[0]}*`

return name[0] + '*'.repeat(length - 2) + name[length - 1]
}
9 changes: 6 additions & 3 deletions packages/core/src/stringFormatter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@
* formatterBankCard('_ 3232 32432 32432 ') // '3232 3243 2324 32'
* formatterBankCard(undefined) // ''
* ```
* @linkcode https://github.com/GreatAuk/utopia-utils/blob/main/packages/core/src/stringFormatter.ts
*/
export function formatterBankCard(str: string) {
export function formatterBankCard(str?: string) {
return `${str}`.replace(/\D/g, '').replace(/(\d{4})(?=\d)/g, '$1 ')
}

Expand All @@ -25,8 +26,9 @@ const PHONE_LENGTH = 11
* formatterPhoneNumber(' asd 123456789012345678901') // '123 4567 8901'
* formatterPhoneNumber(undefined) // ''
* ```
* @linkcode https://github.com/GreatAuk/utopia-utils/blob/main/packages/core/src/stringFormatter.ts
*/
export function formatterPhoneNumber(str: string) {
export function formatterPhoneNumber(str?: string) {
return `${str}`
.replace(/\D/g, '')
.substring(0, PHONE_LENGTH)
Expand All @@ -50,8 +52,9 @@ const ID_CARD_LENGTH = 18
* formatterIdCard(' fsd 36072119941229004X') // '360721 19941229 004X'
* formatterIdCard(undefined) // ''
* ```
* @linkcode https://github.com/GreatAuk/utopia-utils/blob/main/packages/core/src/stringFormatter.ts
*/
export function formatterIdCard(str: string) {
export function formatterIdCard(str?: string) {
return `${str}`
.replace(/[^0-9xX]/g, '')
.substring(0, ID_CARD_LENGTH)
Expand Down

0 comments on commit 7e87c1e

Please sign in to comment.