VCF 电话号码提取
从 .vcf(vCard)文本里提取电话号码:只读 TEL 行,清洗空格 / 横线 / 括号与 +86 前缀、自动去重,并把没有数字或位数异常的 TEL 行标出行号,全程在浏览器本地完成。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
只读 TEL 行:TEL:、TEL;TYPE=CELL:、item1.TEL:(苹果导出的分组属性)、TEL;VALUE=uri:tel: 都能识别,FN / EMAIL / ADR 等字段一律忽略;号码里的空格、横线、括号会被去掉,+86 / 0086 / 86 前缀默认归一成 11 位本地号码。
提取结果
每行一个号码,按在文件里出现的顺序排列,可直接复制到拨号盘、短信群发或 CRM。
粘贴 vCard 内容后即可提取号码
这个工具能做什么
- 把手机通讯录导出的 .vcf 内容整段粘进来,一次性得到一行一个的号码清单,直接用于拨号盘、短信群发或 CRM 导入。
- 批量核对号码:自动去掉空格、横线、括号与 +86 / 0086 / 86 前缀,去重后按出现顺序列出,异常行标出行号与原因。
- 只想要号码、不要别的字段:FN、N、EMAIL、ADR、NOTE、PHOTO 一律忽略,苹果导出的 item1.TEL 分组属性与 TEL;VALUE=uri:tel: 也照样能取到。
示例
输入
BEGIN:VCARD VERSION:3.0 FN:张三 TEL;TYPE=CELL:+86 138-0013-8000 TEL;TYPE=HOME:010-12345678 END:VCARD BEGIN:VCARD VERSION:3.0 FN:李四 item1.TEL:137 0013 7000 TEL;VALUE=uri:tel:139-0013-9001 TEL:138-0013-8000 END:VCARD
输出
13800138000 01012345678 13700137000 13900139001
默认选项下的真实输出:只取 TEL 行(第 4、5、10、11、12 行),+86 前缀归一成 11 位本地号码;5 行全部解析成功,最后一行与第 4 行重复被去掉,所以「有效号码」5、「去重」1、「去重后」4 个号码。
常见问题
vCard 里的号码都能提取出来吗?
只解析 TEL 属性,其它字段全部忽略。常见的几种写法都支持:TEL:13800138000、TEL;TYPE=CELL:+86 138-0013-8000、苹果导出的 item1.TEL;TYPE=pref:…,以及 TEL;VALUE=uri:tel:13900139001。按 RFC 6350 折叠的长行(续行以一个空格开头)会先展开,所以从 iCloud、Android、Outlook 导出的整份 .vcf 都可以直接粘贴。
提取出来的号码为什么和文件里的写法不一样?
清洗规则:全角数字转半角,去掉空格、横线、括号、点号等一切非数字字符;默认还会把 +86、0086、86 前缀归一成 11 位本地号码(+86 138-0013-8000 → 13800138000)。带 + 的国际号码会保留 + 前缀,例如 +1 202-555-0173 → +12025550173。想保留文件里的原始写法,关掉「归一化国家码」即可,此时只做去空格、去横线的清洗。
哪些 TEL 行会被跳过?重复号码怎么算?
清洗后没有数字(例如 TEL:abc)或数字位数不在 5–20 之间(例如 TEL:123)的行会被跳过,并在「被跳过的 TEL 行」里给出行号、原始取值与原因。默认开启去重:同一号码只保留第一次出现的位置,被去掉的条数记在「去重」里;关掉去重后重复号码会全部输出。统计里「有效号码」是去重前的数量,「去重后」就是输出行数。
文本会上传吗?整份通讯录会不会太慢?
不会上传。解析在浏览器本地用纯函数完成,页面不发网络请求,输入内容也不会被记录或存储。算法是一次线性扫描(按行 + 正则),几万行的通讯录导出也能在毫秒级完成,不需要切分粘贴。
关键词:vcf提取号码vcf转电话号码vcf 提取手机号通讯录导出号码批量提取手机号vcf phone extractorextract phone numbers from vcfvcard tel parsercontacts phone list