5 分钟上手 libphonenumber:国际电话号码解析、验证与格式化指南 📅 发布时间:2026/9/9 16:07:48 👁 浏览次数: 5 分钟上手 libphonenumber国际电话号码解析、验证与格式化指南【免费下载链接】libphonenumberGoogles common Java, C and JavaScript library for parsing, formatting, and validating international phone numbers.项目地址: https://gitcode.com/GitHub_Trending/li/libphonenumber后台收到的手机号044 668 18 00、41 44 668 18 00、446681800 都可能出现格式五花八门自己写正则根本兜不住。Google 的 libphonenumber 就是为这类国际电话号码解析、验证与格式化问题而生的库把 200 多个国家和地区的号码规则打包成元数据你只管调 API。 它到底是干什么的libphonenumber 是 Google 维护的跨平台电话号码处理库提供 Java、C、JavaScript 三套实现覆盖全球 200 多个国家和地区自 Android 4.0 起作为系统内置组件存在于手机上。它的核心思路不是硬编码规则而是内置一份可更新的号码元数据解析、验证、格式化、归属地查询全部基于这份数据完成。你常用的入口类是PhoneNumberUtil相当于整个库的总调度。三个主要模块的源码位置Java 版java/libphonenumber/C 版cpp/src/phonenumbers/JavaScript 版javascript/i18n/phonenumbers/⚡ 30 秒跑通拿到第一个解析结果先把仓库克隆到本地git clone https://gitcode.com/GitHub_Trending/li/libphonenumber不想写代码打开 javascript/i18n/phonenumbers/demo.html 这个网页演示页需连同上层 closure 依赖一起使用。页面上有三个输入项电话号码、默认国家代码CLDR 双字母地区码如US、运营商代码可选仅部分国家有效。提交后右侧文本框直接给出解析与验证结果。Java 版 Web demo 想本地跑起来的话可参考 IDE 中的 App Engine 运行配置 场景一解析并验证任意格式号码先说结论把这个号码合法吗这个问题交给库别自己判断。以瑞士号码044 668 18 00为例PhoneNumberUtil phoneUtil PhoneNumberUtil.getInstance(); PhoneNumber num phoneUtil.parse(044 668 18 00, CH); boolean ok phoneUtil.isValidNumber(num); // trueparse是总入口第二个参数告诉它没有 前缀时按哪个国家解读返回的PhoneNumber对象包含两部分国家码 41 和国内号码 446681800。解析失败会抛出NumberParseException按惯例捕获后记录日志即可。 场景二把号码翻译成想要的格式同一个PhoneNumber对象不同展示渠道要的写法不同format方法一次搞定三种phoneUtil.format(num, PhoneNumberFormat.INTERNATIONAL); // 41 44 668 18 00 phoneUtil.format(num, PhoneNumberFormat.NATIONAL); // 044 668 18 00 phoneUtil.format(num, PhoneNumberFormat.E164); // 41446681800如果你的场景是用户正在输入号码的文本框AsYouTypeFormatter更合适——它是实时格式化器每敲一个数字就返回一次当前应显示的样子AsYouTypeFormatter f phoneUtil.getAsYouTypeFormatter(US); f.inputDigit(6); // 6 f.inputDigit(5); // 65比如用户连续输入 650 253 0000它会自动在合适位置补空格输出一半时就是 650 253。注册、登录这类输入框用它体验最好。 场景三查归属地 从长文里捞出号码想知道号码来自哪个城市用PhoneNumberOfflineGeocoder它按Locale返回不同语言的描述传Locale.ENGLISH得到 Zurich传Locale.GERMAN得到 Zürich。实现与数据都在 java/geocoder/src/com/google/i18n/phonenumbers/geocoding/ 下。另一类需求是从一段文字里批量提取号码工单内容、客服记录用PhoneNumberUtil的findNumbersIterablePhoneNumberMatch ms phoneUtil.findNumbers( 请联系我们1 650 253 0000 或联系客服, US); for (PhoneNumberMatch m : ms) { System.out.println(m.number()); }它按元数据里的规则扫描文本只挑出符合规范的号码比正则盲扫可靠得多。 Java / C / JavaScript 怎么选三套实现功能同源按技术栈挑即可语言版本典型场景入口目录Java服务端、Android 客户端java/libphonenumber/C桌面/嵌入式、原生服务cpp/src/phonenumbers/JavaScript浏览器端实时校验javascript/i18n/phonenumbers/ 集成到 Android 只要三步如果你在做 Android 应用Android 电话号码校验其实很轻在项目依赖里引入 libphonenumber 的 Java 模块通过PhoneNumberUtil.getInstance()拿到单例它内部已加载元数据对用户输入调用parse和isValidNumber把结果更新到界面。仓库里有个完整的参考实现java/demoapp/ 下的 Android 示例应用核心逻辑在 java/demoapp/app/src/main/java/com/google/phonenumbers/demoapp/main/MainActivity.java照着它的流程抄作业即可。⚠️ 避开 3 个常见坑地区代码传错parse的第二参必须是 CLDR 双字母码US而不是us或United States且只在号码没有 前缀时起作用。元数据过期号码规则会变metadata/ 目录下的数据随版本更新。上线前看一眼 release_notes.txt 里的元数据变更记录别长期抱着旧版本。E164 与展示格式别混用入库存储建议统一用 E164如 41446681800展示给用户时再按渠道转成 INTERNATIONAL 或 NATIONAL一套数据两种用途。️ 进阶导航想继续深挖按这个顺序查README.md三语言版本的官方使用说明FAQ.md高频问题与易误解点making-metadata-changes.md元数据是怎么维护的java/libphonenumber/test/Java 版测试用例是最好的行为参照【免费下载链接】libphonenumberGoogles common Java, C and JavaScript library for parsing, formatting, and validating international phone numbers.项目地址: https://gitcode.com/GitHub_Trending/li/libphonenumber创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考