文章目录前言isPhone验证手机号是否合法getPhoneFormat格式化手机号显示getPhoneLocationName获取手机号归属地getFormatPhone隐藏中间 4 位getFormatCardNo身份证脱敏综合使用手机号输入框的实时验证与格式化写在最后前言近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓做 App 绕不开用户信息展示手机号要格式化成138 0013 8000身份证要脱敏成110101****1234手机号还得判断是不是合法的。这些逻辑每次都自己写正则太麻烦了。FormatUtil把这些都封装好了这篇带你过一遍。isPhone验证手机号是否合法先从最基础的验证开始。// 验证中国手机号默认 CNconstokFormatUtil.isPhone(this.inputPhone);this.addLog(isPhone(${this.inputPhone}) →${ok});// 验证美国手机号constokFormatUtil.isPhone(this.inputPhone,US);this.addLog(isPhone(${this.inputPhone}, US) →${ok});isPhone第二个参数是国家代码默认CN中国大陆。这个方法底层用的是 HarmonyOS 的i18n.PhoneNumberFormat比自己写正则更准确——中国手机号段在不断扩充靠正则维护很累用系统 API 就交给系统去维护了。getPhoneFormat格式化手机号显示验证通过了接下来是格式化显示。国内格式NATIONALconstrFormatUtil.getPhoneFormat(this.inputPhone);this.addLog(getPhoneFormat(NATIONAL):${r});// 13800138000 → 138 0013 8000国际格式INTERNATIONALconstrFormatUtil.getPhoneFormat(this.inputPhone,CN,{type:INTERNATIONAL});this.addLog(getPhoneFormat(INTL):${r});// 13800138000 → 86 138 0013 8000三个参数手机号字符串国家代码默认CN选项对象type可以是NATIONAL默认或INTERNATIONAL国内页面展示用 NATIONAL涉及跨境业务的场景用 INTERNATIONAL。getPhoneLocationName获取手机号归属地// 中文归属地constrFormatUtil.getPhoneLocationName(this.inputPhone);this.addLog(归属地(zh-CN):${r});// 结果类似广东// 英文归属地constrFormatUtil.getPhoneLocationName(this.inputPhone,en-US);this.addLog(归属地(en-US):${r});// 结果类似Guangdong第二个参数是语言标签BCP 47 格式不传默认是zh-CN。这个 API 也是走系统能力归属地数据由系统维护不需要自己维护号段数据库。不过要注意归属地只是参考信息随着携号转网的普及归属地不代表用户实际所在地。getFormatPhone隐藏中间 4 位这是最常见的手机号脱敏方式用来在列表页、个人中心等地方展示手机号constrFormatUtil.getFormatPhone(this.inputPhone);this.addLog(getFormatPhone:${r});// 13800138000 → 138****8000中间 4 位替换成****用于展示但不泄露完整号码。getFormatCardNo身份证脱敏身份证脱敏比手机号复杂一点要处理 15 位和 18 位两种格式// 18 位身份证脱敏this.addLog(18位脱敏:${FormatUtil.getFormatCardNo(this.inputCard)});// 110101199001011234 → 110101****1234// 15 位身份证脱敏历史遗留格式this.addLog(15位脱敏:${FormatUtil.getFormatCardNo(110101900101123)});// 110101900101123 → 1101**101123规则类似脱敏规则保留前 6 位地区码和后 4 位中间替换为****。实际项目里用户的身份证信息是高度敏感的除了展示时要脱敏传输、存储都要格外注意。综合使用手机号输入框的实时验证与格式化把isPhone和getFormatPhone组合就能实现一个带实时验证和格式化预览的输入框StateinputPhone:string13800138000;// 输入框TextInput({text:this.inputPhone,placeholder:手机号}).layoutWeight(1).height(38).fontSize(13).onChange(v{this.inputPhonev;})// 验证按钮this.Btn(isPhone (CN),#4A90E2,(){constokFormatUtil.isPhone(this.inputPhone);this.addLog(isPhone(${this.inputPhone}) →${ok});})// 格式化展示this.Btn(getFormatPhone (隐藏中间4位),#3949AB,(){constrFormatUtil.getFormatPhone(this.inputPhone);this.addLog(getFormatPhone:${r});})写在最后涉及个人信息展示脱敏是基本操作。FormatUtil把这些都做好了直接用就行验证isPhone支持多国手机号格式格式化显示getPhoneFormatNATIONAL 或 INTERNATIONAL归属地getPhoneLocationName中英文都支持脱敏getFormatPhone手机号、getFormatCardNo身份证下篇讲 FormatUtil 的数字格式化和 URL 处理部分。
HarmonyOS 手机号与身份证格式化:FormatUtil 隐私脱敏实战
发布时间:2026/5/28 23:41:20
文章目录前言isPhone验证手机号是否合法getPhoneFormat格式化手机号显示getPhoneLocationName获取手机号归属地getFormatPhone隐藏中间 4 位getFormatCardNo身份证脱敏综合使用手机号输入框的实时验证与格式化写在最后前言近期发现一款很有意思的HarmonyOS 三方库, 地址 pura/harmony-utils(V1.4.0) , 作者是桃花镇童长老, 我这里也是直接通过该作者公布的源码进行案例编写进行,写了到目前写了一部分demo ,感觉确实很有帮助,这里呢也是开始写一个系列的演示demo 供大家参考。如有帮助可以在OpenHarmony中进行下载安装进行使用哦案例demo导航展示↓↓↓↓↓↓接下来言归正传 ↓↓↓↓做 App 绕不开用户信息展示手机号要格式化成138 0013 8000身份证要脱敏成110101****1234手机号还得判断是不是合法的。这些逻辑每次都自己写正则太麻烦了。FormatUtil把这些都封装好了这篇带你过一遍。isPhone验证手机号是否合法先从最基础的验证开始。// 验证中国手机号默认 CNconstokFormatUtil.isPhone(this.inputPhone);this.addLog(isPhone(${this.inputPhone}) →${ok});// 验证美国手机号constokFormatUtil.isPhone(this.inputPhone,US);this.addLog(isPhone(${this.inputPhone}, US) →${ok});isPhone第二个参数是国家代码默认CN中国大陆。这个方法底层用的是 HarmonyOS 的i18n.PhoneNumberFormat比自己写正则更准确——中国手机号段在不断扩充靠正则维护很累用系统 API 就交给系统去维护了。getPhoneFormat格式化手机号显示验证通过了接下来是格式化显示。国内格式NATIONALconstrFormatUtil.getPhoneFormat(this.inputPhone);this.addLog(getPhoneFormat(NATIONAL):${r});// 13800138000 → 138 0013 8000国际格式INTERNATIONALconstrFormatUtil.getPhoneFormat(this.inputPhone,CN,{type:INTERNATIONAL});this.addLog(getPhoneFormat(INTL):${r});// 13800138000 → 86 138 0013 8000三个参数手机号字符串国家代码默认CN选项对象type可以是NATIONAL默认或INTERNATIONAL国内页面展示用 NATIONAL涉及跨境业务的场景用 INTERNATIONAL。getPhoneLocationName获取手机号归属地// 中文归属地constrFormatUtil.getPhoneLocationName(this.inputPhone);this.addLog(归属地(zh-CN):${r});// 结果类似广东// 英文归属地constrFormatUtil.getPhoneLocationName(this.inputPhone,en-US);this.addLog(归属地(en-US):${r});// 结果类似Guangdong第二个参数是语言标签BCP 47 格式不传默认是zh-CN。这个 API 也是走系统能力归属地数据由系统维护不需要自己维护号段数据库。不过要注意归属地只是参考信息随着携号转网的普及归属地不代表用户实际所在地。getFormatPhone隐藏中间 4 位这是最常见的手机号脱敏方式用来在列表页、个人中心等地方展示手机号constrFormatUtil.getFormatPhone(this.inputPhone);this.addLog(getFormatPhone:${r});// 13800138000 → 138****8000中间 4 位替换成****用于展示但不泄露完整号码。getFormatCardNo身份证脱敏身份证脱敏比手机号复杂一点要处理 15 位和 18 位两种格式// 18 位身份证脱敏this.addLog(18位脱敏:${FormatUtil.getFormatCardNo(this.inputCard)});// 110101199001011234 → 110101****1234// 15 位身份证脱敏历史遗留格式this.addLog(15位脱敏:${FormatUtil.getFormatCardNo(110101900101123)});// 110101900101123 → 1101**101123规则类似脱敏规则保留前 6 位地区码和后 4 位中间替换为****。实际项目里用户的身份证信息是高度敏感的除了展示时要脱敏传输、存储都要格外注意。综合使用手机号输入框的实时验证与格式化把isPhone和getFormatPhone组合就能实现一个带实时验证和格式化预览的输入框StateinputPhone:string13800138000;// 输入框TextInput({text:this.inputPhone,placeholder:手机号}).layoutWeight(1).height(38).fontSize(13).onChange(v{this.inputPhonev;})// 验证按钮this.Btn(isPhone (CN),#4A90E2,(){constokFormatUtil.isPhone(this.inputPhone);this.addLog(isPhone(${this.inputPhone}) →${ok});})// 格式化展示this.Btn(getFormatPhone (隐藏中间4位),#3949AB,(){constrFormatUtil.getFormatPhone(this.inputPhone);this.addLog(getFormatPhone:${r});})写在最后涉及个人信息展示脱敏是基本操作。FormatUtil把这些都做好了直接用就行验证isPhone支持多国手机号格式格式化显示getPhoneFormatNATIONAL 或 INTERNATIONAL归属地getPhoneLocationName中英文都支持脱敏getFormatPhone手机号、getFormatCardNo身份证下篇讲 FormatUtil 的数字格式化和 URL 处理部分。