要從 WhatsApp 匯出電話號碼,請將聊天匯出檔、社群說明或分享的聯絡人卡片貼到瀏覽器型的電話號碼擷取工具中,然後複製去重後的候選清單;整個過程不會上傳任何內容,每一筆符合外形的結果在被你透過授權來源驗證之前,都只會被視為「形狀相符」的候選,而原始的加號、分隔符與國碼都會完整保留在結果中。掃描完全在當前瀏覽器分頁中執行,這點很重要,因為 WhatsApp 聊天匯出檔經常在訊息之間夾雜個人電話號碼,而聊天中的成員合理地期望你不會在他們的檔案上作業時,把檔案送到遠端服務。每一筆符合的結果僅被視為候選,因為比對器並未經過任何號碼計畫、電信業者資料庫或通訊錄的驗證,所以每一組有用的號碼在你聯絡或儲存之前,仍需要再確認一次。形狀剛好等同於 ISO 日期或 IPv4 位址的數字會刻意跳過,因為它們是常見的誤判;至於像 1-800-FLOWERS 這類英文字母組成的代號型號碼,則落在比對器的範圍之外,可能需要手動轉錄。最後的結果是每一行一個保留的電話形狀序列,方便你在複製到其他地方之前先進行人工核對。

how to extract phone number from whatsapp
如何在本地快速擷取 WhatsApp 聊天中的電話號碼

WhatsApp 資料中實際包含哪些電話號碼

使用者想掃描號碼的 WhatsApp 內容大致可分成三類,每一類的呈現形式都不同。聊天匯出檔是純文字檔,每一行寄件人資訊看起來像 [2024-01-15, 14:32] John Doe: hello 加上寄件人所設定的顯示名稱,而對話中任何人輸入的號碼,會夾雜在訊息本文中,並帶有 WhatsApp 各種標點習慣。社群說明則包含管理員在建立社群時所打的內容,常因不同成員使用不同格式,而夾雜帶有國碼的號碼。至於複製的聯絡人卡片或「分享號碼」的貼上內容,則只帶有一組號碼,並使用寄件人當下選擇的任何分隔符。

這正是手動複製令人痛苦的原因。一個人寫 +1 (415) 555-0132,另一個人寫 4155550132,第三個人則寫 +91 98765 43210,在本機號碼群組中夾帶空格。要逐行翻過一個 500 行的聊天匯出檔,再把每一組號碼重新輸入到試算表中,速度慢、又容易出錯,而且做到一半很容易放棄。一個能接受常見分隔符、又能對完全重複的項目進行去重的比對器,能把同樣的工作變成貼上、點擊、再檢視。

先把 WhatsApp 文字放到你的剪貼簿

擷取工具是作用在你已經擁有的文字上,所以 WhatsApp 專屬的步驟就是把那段文字以乾淨的形式產生。在 Android 上,開啟聊天或社群,點選右上角的三點選單,選擇更多,再選匯出聊天,然後挑不含媒體,除非你確實需要附件;產生的檔案是 .txt 檔,可以用任何編輯器開啟。在 iOS 上,開啟聊天,點選頂部的聯絡人或社群名稱,捲到 Export Chat,選擇 Without Media。無論哪一種方式,匯出結果都是一個可讀的純文字檔,內容可以選取、複製,再貼到擷取工具中。

若只是要複製單一則含有號碼的訊息,使用長按選取的方式就夠了:長按訊息泡泡,拖動選取控點框住號碼,再點複製。若是社群說明,請開啟社群、點選主旨列、捲到說明,再整段複製。如果號碼位於分享的聯絡人卡片中,直接開啟卡片並複製相關行,通常會比匯出聊天更快。無論哪種情況,進到擷取工具的都是純文字,這也是比對器唯一設計來讀取的輸入。

在貼上的文字上執行電話號碼擷取工具

WhatsApp 文字已在剪貼簿時,實際的擷取是一段簡短、可重複的程序。電話號碼擷取工具頁面會把工作保留在你的當前分頁,因此在你掃描的過程中,聊天內容不會離開瀏覽器。

  1. 將 WhatsApp 聊天匯出檔、社群說明或複製的聯絡人區塊貼到本機掃描欄位中。
  2. 設定 Minimum digits(最少位數)控制項。預設的七位對大多數 WhatsApp 匯出檔效果不錯,因為七位數的本機格式很常見;若匯出檔中充滿你不想納入雜訊的日期與訂單編號,請把它調高到九或十。
  3. 選擇 Extract phone numbers(擷取電話號碼)。工具會掃描貼上的文字,並以原始呈現方式列出每一個電話形狀的候選,且已去重。
  4. 對照來源文字中的上下文行,逐一檢視結果,確認它真的是電話,而不是剛好長得一樣的雜湊識別碼。
  5. 使用 Copy results(複製結果),把每一行一個保留的候選放到剪貼簿。若瀏覽器拒絕剪貼簿權限,結果仍會顯示在頁面上,可以手動選取複製。
  6. 因為比對器只確認形狀與長度,並不確認號碼是否已被指派,任何你打算聯絡或儲存的號碼,仍須透過授權來源再次驗證。

擷取工具能辨識的分隔符與形狀

WhatsApp 訊息中號碼的書寫方式五花八門,比對器的設計就是為了接受常見的寫法。下表說明擷取工具會讀取哪些、以及刻意略過哪些。

WhatsApp 文字中的格式範例擷取工具的處理方式
帶加號與空格的國際格式+1 202 555 0182接受,並保留加號
帶連字號的國際格式+1-202-555-0182接受,並保留連字號
帶括號與連字號的美國格式(415) 555-0132接受,並保留括號與連字號
帶句點的美國格式202.555.0199接受,並保留句點
純數字連續2025550199接受,視為單一詞元保留
中間帶空格的印度行動電話+91 98765 43210接受,原樣保留
精確的 ISO 日期2024-01-15略過,視為非電話誤判
IPv4 位址192.168.1.10略過,視為非電話誤判
英文字母代號1-800-FLOWERS落在比對器外,需手動處理
號碼後加分機202-555-0182 ext. 42保留主號,捨去分機

比對器強制套用 15 位數的上限,與國際 E.164 號碼計畫一致;任何超過此位數的候選,會在污染結果之前就先被捨棄。前導加號不會從輸出中移除,因為它承載了寄件人所寫的國際意圖。

WhatsApp 匯出檔上的去重是如何運作的

WhatsApp 社群往往會在不同的訊息中重複出現同一組號碼,而聊天匯出檔通常每一則訊息都會帶一次相同的寄件人號碼。擷取工具會在正規化分隔符後,把數字完全相同的重複項合併;因此同一組號碼在一個泡泡中以 +1 202 555 0182 出現、在另一個泡泡中以 +12025550182 出現時,結果清單只會保留一筆,並採用比對器最先看到的那種格式。

加號屬於去重鍵的一部分,這代表以國際格式撰寫的號碼,不會被合併到以純本機字串撰寫的同一號碼。這是刻意的設計,因為國際格式與本機格式可能會走不同的路由,而這個工具並無法為你把本機號碼改寫成國際 E.164。若你希望它們被合併,請先檢視上下文再手動合併,而不是依賴比對器來判斷路由意圖。

WhatsApp 匯出檔中的候選配對輸出中的結果原因
+1 202 555 0182 與 +12025550182一筆分隔符正規化後數字相同
2025550182 與 +1 202 555 0182兩筆加號改變了國際意圖鍵
+91 98765 43210 與 +91-98765-43210一筆數字相同、國際符號相同
(415) 555-0132 與 415-555-0132一筆數字相同,且兩者皆無前導加號

處理 WhatsApp 號碼時的隱私與同意

WhatsApp 對話中充滿個資,而電話號碼是其中最敏感的資料之一。擷取工具完全在當前瀏覽器分頁中執行,並不會上傳貼上的文字,這代表在你作業的過程中,聊天匯出檔不會被送到遠端服務。這是安全的基本底線,同時也是上限:之後剪貼簿、截圖或結果清單發生了什麼事,責任都在你自己。

只處理你有權處理的文字。私人對話的聊天匯出檔屬於對話中的成員,未經同意就把他們的號碼用於行銷、查詢或招募,很可能違反你最初取得該聊天時所依據的條款。若你在共用或借用的裝置上作業,請在擷取完成後,把結果複製到安全的地方,並關閉分頁,讓貼上的文字不會留在頁面狀態中。若剪貼簿權限被拒而改用手動選取,請記得瀏覽器仍會把原始貼上內容保留在欄位中,直到你重新整理。

開始之前值得知道的限制

比對器的範圍是有意受限的,有幾類常見的 WhatsApp 內容落在範圍之外。以字母組成的代號型號碼、緊急簡碼、像 x123 這種字母數字混用的分機,以及以英文單字拼出的號碼,都不會出現在結果清單中,必須手動轉錄。嵌在較長的字母數字詞元內的號碼,例如某個追蹤編號剛好連續包含十個數字,只要符合位數與分隔符規則仍會被擷取,因此請務必對照上下文行檢視候選,而不是把清單當成定論。

若 WhatsApp 匯出檔含有大量訂單編號、日期或 IP 形狀的字串,請在擷取前把最少位數門檻調高到超過預設的七。先以小型具代表性的樣本進行第一輪,例如匯出檔的前一百行,這能告訴你所選的門檻是抓到太多雜訊、還是太少真正的號碼。接著再把整段貼上內容送進電話號碼擷取工具,複製去重後的清單,並在你聯絡或儲存之前,透過授權管道驗證那些真正重要的號碼。

延伸閱讀:PPT 影像轉文字:在本地從 PPTX 擷取投影片文字

延伸閱讀:批次文字轉 slug:在本地大量轉換標題