diff --git a/packages/utils/phoneNumberKorean.ts b/packages/utils/phoneNumberKorean.ts new file mode 100644 index 0000000..3040113 --- /dev/null +++ b/packages/utils/phoneNumberKorean.ts @@ -0,0 +1,15 @@ +export default class PhoneNumberKorean { + static DigitName = [ "공", "일", "이", "삼", "사", "오", "육", "칠", "팔", "구" ]; + static Dash = " "; + + static convert(phone: string): string { + return phone.replace(/[\d\- \+]/g, (char: string) => { + if (char == "-") return PhoneNumberKorean.Dash; + if (char == " ") return " "; + if (char == "+") return "플러스"; + return PhoneNumberKorean.DigitName[ + parseInt(char) as number + ] ?? ""; + }) + } +} diff --git a/packages/utils/saferKorean.ts b/packages/utils/saferKorean.ts index acfec71..ba71370 100644 --- a/packages/utils/saferKorean.ts +++ b/packages/utils/saferKorean.ts @@ -1,6 +1,7 @@ import CallingNumberKorean from "./callingNumberKorean"; import FloatKorean from "./floatKorean"; import IntegerKorean from "./integerKorean"; +import PhoneNumberKorean from "./phoneNumberKorean"; export const IsolatedSymbolMap = { "?": "물음표", @@ -79,6 +80,13 @@ export const LangPrefixs = { "tsx": "리액트 타입스크립트", "jsx": "리액트 자바스크립트", }; +export const LangPrefixMaxLength = (()=>{ + let max = 0; + for (const key in LangPrefixs) { + max = Math.max(key.length, max); + } + return max; +})(); export const ChoseongMap = { "ㄱ": "기역", "ㄴ": "니은", @@ -100,13 +108,6 @@ export const ChoseongMap = { "ㅆ": "쌍시옷", "ㅉ": "쌍지읒", }; -export const LangPrefixMaxLength = (()=>{ - let max = 0; - for (const key in LangPrefixs) { - max = Math.max(key.length, max); - } - return max; -})(); export const SIPrefix = { "k": "킬로", @@ -126,12 +127,10 @@ export const SIPrefix = { "y": "요타", "yi": "요비", }; - export const LiterPrefix = { "m": "밀리", "": "", }; - export const MeterPrefix = { "m": "밀리", "c": "센치", @@ -205,6 +204,10 @@ export function saferKorean(input: string): string { .replace(/[ㄱ-ㅎㄲㄸㅃㅆㅉ]/g, (char: string) => ChoseongMap[char as keyof typeof ChoseongMap]) // Process number, unit + .replace(/[\d\-]+/g, (phone: string) => { + if (!phone.includes("-")) return phone; + return PhoneNumberKorean.convert(phone); + }) .replace(/([\d,]+)([kKMmgGtTpP][iI]?)[bB]/g, (_, num: string, mod: string) => { // 10kib => 십키비바이트 num = IntegerKorean.convertFromString(num);