鸿蒙NEXT开发格式化工具类(ArkTs)

发布于:2025-04-17 ⋅ 阅读:(27) ⋅ 点赞:(0)
import { i18n } from '@kit.LocalizationKit';

/**
 * 格式化工具类
 * 提供电话号码格式化、归属地查询、字符转换等功能。
 * author: 鸿蒙布道师
 * since: 2025/04/14
 */
export class FormatUtil {
  /**
   * 判断传入的电话号码格式是否正确。
   * @param phone - 待验证的电话号码
   * @param country - 电话号码所属国家或地区代码,默认为 "CN"(中国)
   * @param option - 电话号码格式化选项,默认为 NATIONAL
   * @returns 如果电话号码格式正确返回 true,否则返回 false
   */
  static isPhone(
    phone: string,
    country: string = "CN",
    option?: i18n.PhoneNumberFormatOptions
  ): boolean {
    if (!phone || !country) {
      throw new Error("Phone number and country code cannot be empty.");
    }
    const phoneNumberFormat = new i18n.PhoneNumberFormat(country, option);
    return phoneNumberFormat.isValidNumber(phone);
  }

  /**
   * 对电话号码进行格式化。
   * @param phone - 待格式化的电话号码
   * @param country - 电话号码所属国家或地区代码,默认为 "CN"(中国)
   * @param option - 电话号码格式化选项,默认为 NATIONAL
   * @returns 格式化后的电话号码字符串
   */
  static getPhoneFormat(
    phone: string,
    country: string = "CN",
    option?: i18n.PhoneNumberFormatOptions
  ): string {
    if (!phone || !country) {
      throw new Error("Phone number and country code cannot be empty.");
    }
    const phoneNumberFormat = new i18n.PhoneNumberFormat(country, option);
    return phoneNumberFormat.format(phone);
  }

  /**
   * 获取电话号码归属地。
   * @param phone - 待查询的电话号码
   * @param locale - 区域 ID,默认为 "zh-CN"
   * @param country - 电话号码所属国家或地区代码,默认为 "CN"(中国)
   * @param option - 电话号码格式化选项,默认为 NATIONAL
   * @returns 电话号码归属地名称
   */
  static getPhoneLocationName(
    phone: string,
    locale: string = "zh-CN",
    country: string = "CN",
    option?: i18n.PhoneNumberFormatOptions
  ): string {
    if (!phone || !country || !locale) {
      throw new Error("Phone number, country code, and locale cannot be empty.");
    }
    const phoneNumberFormat = new i18n.PhoneNumberFormat(country, option);
    return phoneNumberFormat.getLocationName(phone, locale);
  }

  /**
   * 将输入字符串从源格式转换为目标格式(如中文汉字转为拼音)。
   * @param text - 输入字符串
   * @returns 转换后的字符串
   */
  static transliterator(text: string): string {
    if (!text) {
      throw new Error("Input text cannot be empty.");
    }
    const transliterator = i18n.Transliterator.getInstance('Any-Latn');
    return transliterator.transform(text);
  }

  /**
   * 解析 iconFont 字符。
   * @param iconFont - iconFont 字符(如 "e631")
   * @returns 解析后的 Unicode 字符
   */
  static getIconFont(iconFont: string): string {
    if (!iconFont) {
      throw new Error("Icon font string cannot be empty.");
    }
    return String.fromCharCode(parseInt(iconFont, 16));
  }
}

代码如下:
import { i18n } from '@kit.LocalizationKit';

/**
 * 格式化工具类
 * 提供电话号码格式化、归属地查询、字符转换等功能。
 * author: 鸿蒙布道师
 * since: 2025/04/14
 */
export class FormatUtil {
  /**
   * 判断传入的电话号码格式是否正确。
   * @param phone - 待验证的电话号码
   * @param country - 电话号码所属国家或地区代码,默认为 "CN"(中国)
   * @param option - 电话号码格式化选项,默认为 NATIONAL
   * @returns 如果电话号码格式正确返回 true,否则返回 false
   */
  static isPhone(
    phone: string,
    country: string = "CN",
    option?: i18n.PhoneNumberFormatOptions
  ): boolean {
    if (!phone || !country) {
      throw new Error("Phone number and country code cannot be empty.");
    }
    const phoneNumberFormat = new i18n.PhoneNumberFormat(country, option);
    return phoneNumberFormat.isValidNumber(phone);
  }

  /**
   * 对电话号码进行格式化。
   * @param phone - 待格式化的电话号码
   * @param country - 电话号码所属国家或地区代码,默认为 "CN"(中国)
   * @param option - 电话号码格式化选项,默认为 NATIONAL
   * @returns 格式化后的电话号码字符串
   */
  static getPhoneFormat(
    phone: string,
    country: string = "CN",
    option?: i18n.PhoneNumberFormatOptions
  ): string {
    if (!phone || !country) {
      throw new Error("Phone number and country code cannot be empty.");
    }
    const phoneNumberFormat = new i18n.PhoneNumberFormat(country, option);
    return phoneNumberFormat.format(phone);
  }

  /**
   * 获取电话号码归属地。
   * @param phone - 待查询的电话号码
   * @param locale - 区域 ID,默认为 "zh-CN"
   * @param country - 电话号码所属国家或地区代码,默认为 "CN"(中国)
   * @param option - 电话号码格式化选项,默认为 NATIONAL
   * @returns 电话号码归属地名称
   */
  static getPhoneLocationName(
    phone: string,
    locale: string = "zh-CN",
    country: string = "CN",
    option?: i18n.PhoneNumberFormatOptions
  ): string {
    if (!phone || !country || !locale) {
      throw new Error("Phone number, country code, and locale cannot be empty.");
    }
    const phoneNumberFormat = new i18n.PhoneNumberFormat(country, option);
    return phoneNumberFormat.getLocationName(phone, locale);
  }

  /**
   * 将输入字符串从源格式转换为目标格式(如中文汉字转为拼音)。
   * @param text - 输入字符串
   * @returns 转换后的字符串
   */
  static transliterator(text: string): string {
    if (!text) {
      throw new Error("Input text cannot be empty.");
    }
    const transliterator = i18n.Transliterator.getInstance('Any-Latn');
    return transliterator.transform(text);
  }

  /**
   * 解析 iconFont 字符。
   * @param iconFont - iconFont 字符(如 "e631")
   * @returns 解析后的 Unicode 字符
   */
  static getIconFont(iconFont: string): string {
    if (!iconFont) {
      throw new Error("Icon font string cannot be empty.");
    }
    return String.fromCharCode(parseInt(iconFont, 16));
  }
}


网站公告

今日签到

点亮在社区的每一天
去签到