簡體   English   中英

格式化國際電話號碼

[英]Formatting International Phone Numbers

我有一個項目,我可以輸入電話號碼。 所述電話號碼可以來自任何國家。 用戶在輸入電話號碼之前選擇了國家。

有沒有辦法在用戶在 WPF 中輸入電話號碼時格式化電話號碼?

我正在使用 Google 的 C# 庫端口,但無濟於事(單擊此處

謝謝!

我可以建議您使用兩個屬性,其中HomeNumber正則表達式用於格式化數字輸入。

示例(更接近偽代碼):

public string Country
{
    get { return country; }
    set { country = value; }
}

public string HomeNumber
{
    get
    {
        if (homeNumber == null)
        {
            return string.Empty;
        }

        if (country.Equals("USA"))
        {
            return Regex.Replace(homeNumber, @"(\d{2})(\d{2})(\d{2})", "$1-$2-$3");
        }
        else if (country.Equals("Russia"))
        {
            return Regex.Replace(homeNumber, @"(\d{3})(\d{2})(\d{2})", "$1-$2-$3");
        }
    }

    set
    {
        homeNumber = value;
    }
}

如果國家選擇很多,以減少建築的數量If ,我可以建議使用的State模式。

Advantages

  • 簡單的解決方案
  • 不需要第三方庫和項目

Disadvantages

  • 不是嚴重的缺陷,但數字的格式化是在打印數字完成后進行的。

國際電話號碼的定義一團糟,原因有以下三個:

1)如何撥打國際電話號碼取決於您所在的國家/地區。如果您的應用程序僅在一個國家/地區使用,那么這還不算太糟糕。 但是,可能有多種方法可以獲取國際連接,例如先撥 00 或簡單地撥打 +。

2)電話號碼的國家代碼設計得特別糟糕。 只是一些例子:

1339 美國
1340 維爾京群島(加勒比群島)
1341 美國
1342 未使用
1343 加拿大

美國,加拿大和一些較小的地方共享 1 作為國家代碼,接下來的 3 位數字決定,如果是美國或加拿大或......沒有簡單的方法來找出國家,比如第一個 xxx 是加拿大,其余的我們。

一些國家/地區有 2 位數代碼,其他國家/地區有 3 和 4。

3) 即使在同一個國家,不同地區也可以有不同的格式。

最簡單的解決方案可能是:

  1. 對國際和國內號碼使用不同的格式
  2. 對所有國際數字使用 +ccc dddddddd 格式,其中 cc 是一個可變 (!) 長度的國家代碼,dddddddd 是國家內的數字
  3. 根據 dddddddd 使用的數字數量,您可以將它們寫為 ddd dd dd、dddd dddd 和 ddd ddd ddd。

當然,您還可以通過格式化一個國家/地區的區號來進一步復雜化。 我無法幫助您解決問題,但其余的您可以在 Github 上找到代碼(太多了,無法在此處發布): github.com/PeterHuberSg/WpfWindowsLib/blob/master/WpfWindowsLib/PhoneTextBox.cs

國際電話號碼和 PhoneTextBox 的詳細解釋在 CodeProject: International Phone Number Validation Explained

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM