簡體   English   中英

使用RegEx解析電話號碼格式

[英]Parsing phone number formats with RegEx

我的應用程序有三種類型的手機格式:

    //tel:+17548758181;ext=8142
    //718-222-4568
    //718-333-1234 ext/option 718280

所以我知道的最小格式是:

tel:+bunchofNumbers;ext=bunchOfNumbers
###-###-####
###-###-#### ext/option bunchofnumbers

因此,我希望以一種格式解析它們,如果它存在的話,它會給我一個像“7182224568”這樣的電話和類似“3376”的電話分機。 我可以用普通的字符串操作方法編寫它,但我想知道是否有更好的方法可能使用RegEx? 我不熟悉RegEx。

世界各地的電話號碼差異很大。 即使在美國,這些數字也可以是全球(+64215551212,新西蘭的數字)或地區代碼(5551212)或本地(6175551212,波士頓的數字[我希望])。

除非您需要實際撥打電話,否則最好的方法是允許最終用戶輸入任何內容。

這是一種可能的方法:

string[] inputs = 
{
    "tel:+17548758181;ext=8142",
    "718-222-4568",
    "718-333-1234 ext/option 718280" 
};
var pattern = @"^\D*?(?:\+1)?(?<Number>\d{10}|\d{3}-\d{3}-\d{4})\D*(?<Ext>\d*)$";

foreach (var input in inputs)
{
    var match = Regex.Match(input, pattern);
    Console.WriteLine("{0}: {1}", match.Success, input);
    if (match.Success) 
    {
        Console.WriteLine("Number: {0}, Ext: {1}",
            match.Groups["Number"].Value.Replace("-", ""),
            match.Groups["Ext"].Value);
    }
    Console.WriteLine();
}

您可以通過在“Ext”組上使用String.IsNullOrEmpty來檢查擴展名。

模式細分:

  • ^\\D*? - 匹配字符串的開頭( ^ ),以及零個或多個非數字( \\D* )。 由於數字中的“+1”有資格作為非數字,我通過添加問號元字符使非數字檢查非貪婪,因此\\D*?
  • (?:\\+1)? - 非捕獲組以匹配可選的“+1”號碼
  • (?<Number>\\d{10}|\\d{3}-\\d{3}-\\d{4}) - 帶有和不帶短划線的數字的命名組
  • \\D* - 如果存在擴展名,則匹配零個或多個非數字
  • (?<Ext>\\d*)$ - 擴展命名組,匹配零個或多個數字,以防它不存在。 也匹配字符串的結尾。

暫無
暫無

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

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