電話號碼解析與格式化

解析國際電話號碼、校驗有效性,並重排為 E.164、國際或國內格式。

解析國際電話號碼、校驗有效性,並重排為 E.164、國際或國內格式。 解析國際電話號碼、校驗有效性,並重排為 E.164、國際或國內格式。

背景知識

電話號碼的結構

國際電話號碼由三個邏輯部分組成:國家呼叫程式碼(北美為 1、英國 44、中國 86、 日本 81 等)、國內有效號碼(區號加使用者號碼)以及可選的擴充套件號。E.164 建議定義 了規範表示:開頭的 +、國家程式碼、無分隔符的國內號碼——例如 +14155552671。 使用者自由輸入號碼時可能帶空格、短橫線、括號或只在國境內有意義的開頭 0。 好的解析器會把這一切歸一化為結構化欄位。

為什麼解析比看起來難

各國幾乎在所有方面都有差異:國內號碼長度、主幹字首的用法(中國從國外撥打 時要去掉開頭 0,英國對其主幹 0 也如此)、移動與固定字首、特殊短號碼等。 4444 在某些國家是有效國內號碼,在另一些國家則無效。編號計劃也在不斷變化—— 巴西 2016 年給所有移動號碼加了一位,每個國家的監管機構都會發布變更。這就是 為什麼嚴肅的校驗器攜帶完整的後設資料資料庫而不是硬編碼正則。本頁面所用的庫 內建了每個國家和地區的官方 Google 後設資料,因此它知道例如中國移動號碼是 11 位且以 1 開頭。

使用解析器

輸入帶或不帶 + 和國家程式碼的號碼。如果省略國家程式碼,請從下拉框選擇預設 國家,解析器才能解析國內格式。工具會報告 E.164 形式、帶空格的國際格式、 國內格式、檢測到的國家、呼叫程式碼、國內號碼、號碼是否有效且可能、號碼型別 (移動、固定、免費電話等),以及後設資料能確定時的運營商。一個號碼可能"可能" (長度與字首形狀正確)但並非"有效"(已分配且結構正確)——兩種檢查都會顯示。

實用提示

從裸號碼檢測國家是啟發式的:+1 555 2671 明確指向北美,但短號碼可能匹配 多個國家。機器間使用務必包含國家程式碼,並在資料庫中儲存 E.164 形式。校驗 使用者輸入時,先用"可能"檢查獲得即時 UX 反饋,提交時再做完整的"有效"檢查。 本工具完全在瀏覽器中基於內建的 libphonenumber-js(MIT)資料執行,你輸入的 任何內容都不會被傳輸。

使用 MIT 協議的 libphonenumber-js 庫(已內置於 public/assets)。解析在瀏覽器本地完成。

常見問題

為什麼會出現「可能但不有效」?
可能表示號碼符合該國家的一般長度與字首形狀;有效表示在官方後設資料下是真正已分配的號碼。許多測試號碼或未分配號段都是可能但不有效。
什麼是 E.164,為什麼要儲存它?
E.164 是 ITU 的電話號碼標準:+ 國家程式碼 國內號碼,最多 15 位。儲存這種單一規範形式讓去重和國際撥號變得簡單,因為它在所有國家都無歧義。
沒有國家程式碼能校驗號碼嗎?
不能可靠校驗。沒有國家程式碼時解析器只能猜測,短號碼可能在許多國家都有效。只要輸入不是明確國際格式,就應提供預設國家(或要求國家程式碼)。
號碼型別是如何確定的?
內建後設資料按字首對號段分類:移動、固定、免費電話、付費電話、VoIP、共享成本等。僅當元資料分配了型別時才顯示,否則顯示短橫線。
我的輸入會被髮送到任何地方嗎?
不會。解析、校驗和格式化都在瀏覽器內使用內建的 libphonenumber-js(MIT)完成。頁面載入後可以完全離線工作。
為什麼同一個號碼在不同國家格式化結果不同?
國際格式按各國自己的慣例分組(例如法國號碼兩位一組、美國號碼 3-3-4)。E.164 始終保持一致,變化的只是顯示形式。