원시 전화번호 유출은 하루를 망칠 것이다
Source: Dev.to
소개
전화 번호 마스킹을 적용하는 건 간단해 보이지만… 국제 형식, 이상한 입력, 그리고 +62 (812)-3456..7890 같은 QA 테스트를 만나면 그렇지 않다는 걸 알게 됩니다. 이 TypeScript 전화‑마스킹 유틸리티는 그런 현실을 위해 만들어졌으며, GDPR 및 데이터‑보호 표준을 따르고, 로케일에 대한 가정을 하지 않으며, 문자열이든 숫자든 받아들이고, 여러분이 던지는 어떤 혼란도 안전하게 정규화합니다. 국가 규칙도, 전화‑메타데이터 데이터베이스도 없고—그냥 여러분에게 방해되지 않는 예측 가능한 마스킹만 제공합니다.
기본 동작
기본 동작은 의도적으로 지루합니다(좋은 의미로): 마지막 4 자리 숫자를 제외한 모든 것을 마스킹합니다.
maskPhone('1234567890')
// ******7890
maskPhone('+62 812 3456 7890')
// +*********7890
합리적인 출력을 얻기 위해 별도의 설정이 필요 없습니다—이런 유틸리티가 그래야 하는 바로 그 동작입니다.
설정 가능한 옵션
제어가 필요할 때는 API가 평평하고 읽기 쉽습니다.
앞쪽에 몇 자리 표시하기
maskPhone('628123456789', { showFirst: 3, showLast: 2 })
// 628*******89
UI 표시를 위한 포맷 유지
maskPhone('+1 (555) 123-4567', { preserveFormat: true })
// +* (***) ***-4567
마법도 없고, 놀라움도 없습니다. 함수는 옵션이 말하는 대로 정확히 동작합니다—그 이상도, 그 이하도 없습니다.
사용자 정의 마스크
“내가 뭘 하는지 안다”는 사람들을 위해 customMask가 모든 것을 재정의하고 문자별로 완전한 제어권을 제공합니다.
maskPhone('1234567890', {
customMask: (char, idx) => (idx % 2 === 0 ? '*' : char),
})
// *2*4*6*8*0
내부 구현
코드는 작고, 의존성이 없으며, 적극적으로 방어적입니다:
null값이 와도 충돌하지 않습니다.- 터무니없는 옵션 값이 와도 데이터가 유출되지 않습니다.
- 긴 입력이 와도 로그가 녹아내리지 않습니다.
UI, 분석, 혹은 로깅에 넣어두고 잊어버려도 되는 그런 유틸리티이며—그것이 마스킹 코드에 줄 수 있는 최고의 칭찬입니다.
설치
코드는 GitHub에 공개되어 있으며, 완전히 오픈되고, 별다른 드라마가 없습니다:
선호하는 패키지 매니저로 설치하세요:
npm install @ekaone/mask-phone
# or
yarn add @ekaone/mask-phone
# or
pnpm add @ekaone/mask-phone
그게 전부입니다. 설치 후 별도의 절차도, 피어‑디펜던시 서프라이즈도, “왜 이게 3 MB야?” 같은 얘기도 없습니다.