
libphonenumber 全解国际电话号码解析、格式化与校验一次搞定【免费下载链接】libphonenumberGoogles common Java, C and JavaScript library for parsing, formatting, and validating international phone numbers.项目地址: https://gitcode.com/GitHub_Trending/li/libphonenumberlibphonenumber 是 Google 维护的国际电话号码解析、格式化与校验库支持 Java、C、JavaScript 三种语言。在表单输入框里随手敲一个 “41 44 668 18 00”它能告诉你这是瑞士苏黎世的一个固定号码。照着本文走一遍你可以完成号码解析、有效性校验和多格式输出的完整链路。 它到底能做什么Java 版本功能最全Android 4.0 起它就内置在 Android 框架里。核心能力对应五类场景解析与标准化号码把 “044 668 18 00” 拆成国家码 41 国内号码的统一结构用于国际电话号码校验多种格式化风格E.164、国际格式、国内格式一个号码三种展示用于存储与展示层AsYouType 实时格式化用户每敲一位数字就自动加分隔符用于表单实时输入号码归属地查询把号码反查到城市可按语言输出用于注册后展示归属号码类型识别区分固话、移动、免费电话用于业务号筛选核心解析与校验逻辑集中在PhoneNumberUtil归属地和运营商映射是独立模块PhoneNumberOfflineGeocoder与PhoneNumberToCarrierMapper。目录结构只保留与能力相关的顶层libphonenumber/ ├── java/ # Java 核心库、地理编码、运营商映射、Android demo ├── cpp/ # C 实现 ├── javascript/ # JavaScript 版本及网页 demo ├── metadata/ # 全球电话号码规则元数据 └── README.md # 官方文档含全部快速上手示例⚙️ 把环境跑起来三步走拿代码 → 确认版本 → 跑通第一个 demo。git clone https://gitcode.com/GitHub_Trending/li/libphonenumber cd libphonenumber grep version java/libphonenumber/pom.xml # 确认当前版本9.0.37-SNAPSHOT head release_notes.txt # 看最近一次更新改了什么项目大约每两周更新一次号码规则动手前翻一眼 release notes确认你关心的国家有没有调整过。demo 建议先跑网页版用浏览器打开 demo-compiled.html你会看到一个可以填号码、选默认国家的页面输入号码后立刻显示解析结果和有效性不用任何构建步骤。想跑 Java 服务端 demo 就去看java/demo它基于 Google App Engine需要先装 App Engine SDK。下图是在 IDE 里配置本地服务器的界面把 Host 设为 localhost、端口 8080 后启动浏览器访问就能看到和网页版一致的演示页面。Android demo 应用在java/demoapp用 Android Studio 跑起来是一个叫 “E.164 Formatter” 的应用演示在真实 App 里解析联系人号码。C 和 JS 版本一句话带过C 在cpp/用 CMake 构建JS 就是上面的网页 demo。跟着一个真实例子走从 “044 668 18 00” 到校验结果最常见的业务场景是用户在表单里填手机号你要把它解析、校验再存成标准格式。以一个瑞士本地号码为例一次走通完整链路// 输入瑞士本地号码目标国家 CH String swissNumberStr 044 668 18 00; PhoneNumberUtil phoneUtil PhoneNumberUtil.getInstance(); // 1. 解析拆成国家码 国内号码 PhoneNumber number phoneUtil.parse(swissNumberStr, CH); // 2. 校验是不是一个真实有效的号码 boolean isValid phoneUtil.isValidNumber(number); // 返回 true // 3. 格式化输出不同展示风格 System.out.println(phoneUtil.format(number, PhoneNumberFormat.INTERNATIONAL)); // 41 44 668 18 00 System.out.println(phoneUtil.format(number, PhoneNumberFormat.E164)); // 41446681800 // 4.可选归属地查询拿到号码所在的城市 PhoneNumberOfflineGeocoder geocoder PhoneNumberOfflineGeocoder.getInstance(); System.out.println(geocoder.getDescriptionForNumber(number, Locale.ENGLISH)); // Zurich运行后你会看到三个输出国际格式 “41 44 668 18 00”、E.164 格式 “41446681800”以及归属地 “Zurich”。E164 是后端存储最常用的格式因为它不带空格、无歧义。关键就在PhoneNumberUtil.parse()这一行传入原始字符串和双字母国家码剩下的交给库。几个容易踩的坑parse()的第二个参数很难省→ 号码没有 “” 国际前缀时库无法推断它属于哪个国家解析会直接抛NumberParseException。解法从用户选择的国旗取国家或要求用户输入时带上 “”。别把isPossibleNumber的结果当最终校验→ 它只做长度检查位数对就可能通过适合输入框上的快速预判比如判断“还没输完”最终判定要用isValidNumber它会检查号码前缀等完整规则。运营商信息是“原始运营商”不是“当前运营商”→ 号码可携号转网PhoneNumberToCarrierMapper返回的只是号段最初分配给谁的官方 FAQ 明确提示了这一点。界面上不要直接标成“当前运营商”。往深了看实时输入格式化做表单的话用AsYouTypeFormatter。调一次phoneUtil.getAsYouTypeFormatter(US)拿到格式化器用户每敲一个键就调inputDigit()返回的字符串自动带分隔符不用自己写正则。实现源码在PhoneNumberUtil同目录的AsYouTypeFormatter.java里。批量处理与自定义元数据批量场景用findNumbers(text, US)从一段文本里抽出所有号码适合清洗通讯录或评论区里的手机号归属地模块支持英语、德语、意大利语等多语言输出底层数据在java/geocoder/下。需要自己调整号码规则时按 making-metadata-changes.md 的流程操作。到这里从 clone 到跑通解析、校验、格式化、查归属的完整链路已经走完。后续有疑问从官方文档 README.md、常见问题 FAQ.md 和核心源码入口 PhoneNumberUtil.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),仅供参考