如何解開電話號碼

您是否注意到每個人寫電話號碼的方式都不同?有些人使用空格,有些人使用破折號,有些人使用括號。不同的人將不同數量的數字組合在一起。

當您嘗試在資料庫中儲存電話號碼並需要透過電話號碼檢索記錄時,這會成為一個真正的問題。

直接跳到:

什麼是標準化電話號碼?
電話號碼格式混亂
為什麼這是一個問題?
如何標準化電話號碼
透過使用者介面
處理現有數據
去掉一些非數字字符
確定國家代碼
只保留數字和+號
電話號碼哲學
最後的想法什麼是標準化電話號碼?

在 IT 和電腦科學中,標準化意味著使某些事物保持一致或標準。標準化電話號碼是所有記錄中格式一致的電話號碼。

電話號碼有國際標準嗎?

E.164標準定義了國際公共電信編號計劃。如果我們想以標準化的方式儲存電話號碼,我們應該使用 E.164 格式。

還有另一個標準專注於人類可讀的格式。國際電信聯盟 (ITU)發布了E.123標準,該標準定義了電話號碼、電子郵件地址和網址的標準符號。

此+符號表示國際撥號前綴。國家代碼為 44,電話號碼為345678901。

但當要求在表單欄位中輸入電話號碼時,大多數人會按照當地慣例甚至個人喜好來寫。這些在不同國家甚至不同人之間可能存在很大差異。

電話號碼格式混亂
例如,在美國,人們會將電話號碼寫當 卡塔爾電話號碼數據 您將電話號碼儲存在資料庫中時,您希望能夠搜尋它們,無論它們是如何輸入的。

卡塔爾電話號碼數據

假設您的資料庫中有以下電話號碼

如果您接到 的電話您將如 思想領導為您的銷售團隊提供支援的 5 種方式 何在資料庫中找到該客戶的詳細資料?

如何標準化電話號碼
儲存電話號碼的最明確的格式是 E.123 定義的不帶任何空格的國際格式

但你要如何到達那裡呢?

透過使用者介面
最好的方法是先嘗試讓使用者以 香港新聞 這種格式輸入他們的電話號碼。

這可以透過提供國家/地區下拉列表,然後根據國家/地區代碼自動格式化電話號碼來完成。

例如,國際電話輸入庫提供了這個漂亮的 UI:

國際電話輸入

處理現有數據
如果因為您正在處理遺留資料或從其他來源匯入資料而無法讓使用者以正確的格式輸入電話號碼,那

麼您的旅程將會更加困難 – 但並非不可能

首先,考慮使用庫。 開源了一個名為 的函式庫,它可以在許多情況下為您提供幫助。

如果您使用的是 ,請查看 的 端口,名為

但有時您需要編寫自己的規範化函數或處理庫無法處理的特殊情況,因為它沒有足夠的上下文。

我將重點放在絕大多數情況,您的主要敵人是電話號碼的書寫方式不一致。對於最奇怪的本地邊​​緣情況,請查看本文末尾的電話號碼原理部分。

在大多數情況下,以下步驟應該可以幫助您順利完成此任務:

去掉一些非數字字符
第一步要小心剝離非數字字元。有些可以幫助您確定區號。

某人書寫電話號碼的方式可以為您提供有關國家/地區代碼和區號的提示。例如,在美國,區號通常用括號括起來。
考慮這些結構並保存您對國家或地區代碼的第一次猜測以供日後使用。

確定國家代碼
如果您只處理來自一個國家/地區的電話號碼,則可以假設所有電話號碼都已經具有 、或格式的國家/地區代碼+1,或者它們是本地號碼

人們也可能輸入了沒有符號的國家代碼+,例如

如果本地號碼以單一 開頭0,則在幾乎所有國家/地區,您都可以(並且必須)刪除0並在前面新增國家/地區代碼。然而,在義大利, 即使從國外撥打國家代碼時,前導 0 也必須保留在號碼中。

如果使用者輸入以 開頭的號碼00,則刪除 ,00但假設國家代碼已存在。請注意某些國家的特殊情況。例如,在澳洲或香港,00xx用於選擇用於撥出國際電話的營運商。

但大多數情況下:

如果您要處理來自多個國家/地區的電話號碼,您需要知道使用者輸入電話號碼時所在的國家/地區。

如果您很幸運並且只需要處理幾個國家/地區,區號可以為您提供有關該國家/地區的提示:某些區號在一個國家/地區使用,但在另一個國家/地區則不使用。

只保留數字和+號
最後一步,刪除除+開頭符號之外的所有非數字字元。

您最終的標準化電話號碼應如下所示:

現在您已準備好將其儲存為字串

當您必須搜尋電話號碼時,請以相同的方式標準化搜尋字詞並進行搜尋。

為了安全起見,請同時儲存原始電話號碼。您稍後可能需要它進行驗證或將其顯示給使用者。

電話號碼哲學
我必須承認一件事:我讓它聽起來比實際上更簡單。雖然本文的其餘部分應該涵蓋您將遇到的大多數情況,但現實卻混亂得多。

為了更深入地了解這個主題,我建議閱讀文章程式 設計師相信關於電話號碼的謊言 ,它是 儲存庫的一部分。

如果您不小心,以下是可能傷害您的最重要的方面

電話號碼並不總是唯一的:人們可以擁有多個電話號碼,一個電話號碼可以由許多人共享。
電話號碼可以更改:人們可以更改他們的電話號碼,並且可以重新分配電話號碼。
並非所有號碼都可以撥打或發短信
非 ASCII 字元:例如,在埃及,經常使用阿拉伯文字來書寫電話號碼。
編號計劃變更:國家/地區可以更改其編號計劃,並且可能有一個過渡期,在此期間兩種格式都有效。
電話號碼不是數字:電話號碼不是數學意義上的數字。與某些國家的7電話號碼不同(例如以色列鐵路)。007*5770
最後的想法
僅在輸入電話號碼時儲存電話號碼幾乎可以保證您以後很難找到它們。如果您希望以後能夠搜尋電話號碼,那麼儘早標準化電話號碼是個好主意。

這裡提醒一下本文的要點:

首先嘗試從用戶那裡獲取標準化的數字。
向使用者顯示標準化數字並要求他們確認。
一些非數字字元可以為您提供有關國家/地區代碼的提示。
嘗試猜測國家/地區代碼時,請注意當地慣例。
不要簡單地刪除所有非數字字元並將其儲存為數字。
以標準化格式將電話號碼儲存為字串,並保留原始格式。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端