| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 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}`;
- }
|