import { parsePhoneNumberFromString, CountryCode, } from "libphonenumber-js"; import { IS_VALID_FULL_PHONE, } from "@utils/constants"; /** * 统一处理历史脏数据 * @param phone - 原始电话号码 * @param country - ISO 3166-1 alpha-2 国家码(如 US, CN) * @returns 格式化后的 E.164 电话号,区号和号码之间用空格分隔 */ export function normalizePhoneForForm( phone?: string, country?: string, ): string { if (!phone) { return ""; } if(IS_VALID_FULL_PHONE.test(phone)) { return phone; } try { const parsed = parsePhoneNumberFromString(phone, country as CountryCode); console.log(phone + " parsed ----: ", parsed,parsed?.isValid()); if (parsed?.isValid()) { // E.164 的号码是 +12135551234 // 我们在返回时加空格分隔区号和号码 return `+${parsed.countryCallingCode} ${parsed.nationalNumber}`; } if(parsed?.isPossible()) { return `+${parsed.countryCallingCode} ${parsed.nationalNumber}`; } } catch { // parse 出错时忽略,走 fallback } // fallback: 除了数字,其他符号均移除 const digits = phone.replace(/[^\d]/g, ""); // 没有 + 的情况,给默认国家区号 const defaultCallingCode = country === "CN" ? "+86" : country === "GB" ? "+44" : "+1"; return `${defaultCallingCode} ${digits}`; }