libphonenumber 快速实践:解析与校验国际电话号码
libphonenumber 快速实践解析与校验国际电话号码【免费下载链接】libphonenumberGoogles common Java, C and JavaScript library for parsing, formatting, and validating international phone numbers.项目地址: https://gitcode.com/GitHub_Trending/li/libphonenumber格式五花八门、真假难辨、归属地查不到——电话号码处理总让人头疼。libphonenumber 是 Google 出品的国际电话号码解析库把各种格式的号码解析、验证、格式化一次搞定覆盖全球 200 多个国家和地区。它到底解决了什么写过校验手机号的正则就知道这事有多棘手各国号码长度不同区号、国家前缀规则各异还有大量号段在不断调整。libphonenumber 就是为此而生——Google 官方维护的号码规则覆盖 200 国家/地区从 Android 4.0 起内置于系统中。注册表单校验、客服外呼、数仓里清洗历史数据这三类活都可以不用再自建规则库。仓库按语言组织日常用得到的四个位置Java 核心库java/libphonenumber/C 实现cpp/src/phonenumbers/JavaScript 版本javascript/i18n/phonenumbers/号码元数据metadata/目录含打包好的metadata.zip与更新工具最短路径跑起来先拉源码git clone https://gitcode.com/GitHub_Trending/li/libphonenumber下面是最小完整示例一次把解析、验证、格式化做完以 Java 版为例C 与 JS 版 API 思路一致import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; import com.google.i18n.phonenumbers.Phonenumber.PhoneNumberFormat; PhoneNumberUtil phoneUtil PhoneNumberUtil.getInstance(); String swissNumberStr 044 668 18 00; // 瑞士本地格式 try { PhoneNumber proto phoneUtil.parse(swissNumberStr, CH); // 第二个参数默认国家代码 System.out.println(phoneUtil.isValidNumber(proto)); // 验证真假 System.out.println(phoneUtil.format(proto, PhoneNumberFormat.E164)); } catch (NumberParseException e) { System.err.println(解析失败: e); }预期输出两行true和41446681800。解析后的PhoneNumber对象里国家代码是 41国内号码部分是 446681800后续所有操作都基于这个对象。format提供三种常用形态用途不同格式示例输出常见用途INTERNATIONAL41 44 668 18 00对外展示带国际拨号前缀NATIONAL044 668 18 00面向国内用户的本地展示E16441446681800入库存储、传输、号码去重不想写代码先感受一下JavaScript 版自带网页 demojavascript/i18n/phonenumbers/demo.html浏览器里输入号码、默认国家代码CLDR 双字母码可选填运营商代码即可看到解析结果。三个高频场景逐个拆边输入边整理实时格式化用户还在敲数字时就按当地习惯实时分隔号码而不是提交后统一重排。AsYouTypeFormatter就是干这个的AsYouTypeFormatter formatter phoneUtil.getAsYouTypeFormatter(US); System.out.println(formatter.inputDigit(6)); // 输出 6 System.out.println(formatter.inputDigit(5)); // 输出 65 // ... 继续输入剩余数字 System.out.println(formatter.inputDigit(3)); // 输出 650 253每输入一位就把返回值赋给输入框即可。空格插在哪、何时切换国家前缀全部由库按目标国家规则处理你不需要写任何格式化逻辑。验证 归属地判断真假并拿到地区名号码验证通过后想知道这个号在哪用 geocoder 模块同一个号码可以传不同Locale拿到多语言地区名PhoneNumberOfflineGeocoder geocoder PhoneNumberOfflineGeocoder.getInstance(); System.out.println(geocoder.getDescriptionForNumber(proto, Locale.ENGLISH)); System.out.println(geocoder.getDescriptionForNumber(proto, Locale.GERMAN));预期输出Zurich英语、Zürich德语。归属地映射数据存放在 java/geocoder/src/com/google/i18n/phonenumbers/geocoding/ 目录下。批量提取从一段杂文中捞出所有号码清洗用户留言、注册说明这类自由文本时findNumbers负责把号码全部捞出来String text 请联系我们1 650 253 0000 或发送邮件至supportexample.com; IterablePhoneNumberMatch matches phoneUtil.findNumbers(text, US); for (PhoneNumberMatch match : matches) { System.out.println(match.number()); }预期输出1 650 253 0000。文本里唯一的号码被提取出来邮箱这类内容不会混进来。接到应用里的完整链路以仓库自带的 Android 示例应用java/demoapp/为参照集成就是四步加依赖示例应用基于 Maven 模块java/libphonenumber/在 build.gradle 里加上对应依赖即可。初始化PhoneNumberUtil.getInstance()是单例进程里取一次全局复用。调用用户在界面选择国家后把该国家代码连同输入号码传给parse再走验证与格式化核心逻辑见 MainActivity.java。界面回显主界面是国家下拉框 输入区的组合解析、验证结果直接展示在输入区下方。XML 里关键只有一个自定义控件com.google.phonenumbers.demoapp.main.CountryDropdown android:idid/country_dropdown android:layout_widthdimen/main_activity_default_width_item android:layout_heightwrap_content app:layout_constraintTop_toBottomOfid/tv_country_dropdown_label /想先跑通 Web 端 demo 看效果的话java/demo/可以在 IDE 里以 App Engine 本地服务方式启动Run/Debug 配置大致如下这些坑先知道默认国家代码不能省像044 668 18 00这种本地格式号码parse的第二个参数必须给出 CLDR 双字母国家代码否则定位不到号码所属国家抛NumberParseException。存储与展示分格式数据库里存 E.164无空格符号、便于去重展示时再实时转成 INTERNATIONAL 或 NATIONAL。直接把展示字符串入库同一个号码会以多种形式散落各处。号码规则会变各国号码规则会调整库内置的元数据 metadata/metadata.zip 需要定期更新更新流程在仓库根目录的making-metadata-changes.md里有完整说明。libphonenumber 把国际电话号码解析的几件核心事——解析、验证、格式化、批量提取——收敛在PhoneNumberUtil一个入口上归属地查询由 geocoder 模块补齐。更多细节看 README.md 和 FAQ.mdJava 测试目录java/libphonenumber/test/com/google/i18n/phonenumbers/里的大量用例也能直接当参考实现。号码规则随版本持续演进升级前建议过一遍release_notes.txt保持较新版本能拿到最新的规则与修复。【免费下载链接】libphonenumberGoogles common Java, C and JavaScript library for parsing, formatting, and validating international phone numbers.项目地址: https://gitcode.com/GitHub_Trending/li/libphonenumber创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →