2010-01-25 78 views
1

必須有一種更簡單的方法才能做到這一點。從vb.net中的字符串中導入電話號碼

我正在嘗試一個叫做「導入電話號碼」的電話號碼類的功能。它應該在任何地方使用任何帶有10位數字的字符串(並允許擴展名),並將它們導入到它自己的屬性中:AreaCode,Prefix,Suffix和Extension(aaa-ppp-ssss-xxxx ...)。

我使用正則表達式檢查輸入以確保它是有效的,現在我想將這些片段標記爲它們各自的屬性。我看起來像這樣(不完整):

Public Sub ImportPhoneNumber(ByVal anyNumber As String) 
    'phone number is 10-digits long, e.g.: 012-345-6789 
    Dim reg_exp_10 As New Regex("^((\D*)\d(\D*)){9}((\D*)\d){1}(((x|ext){1}(\d)+)?|\D*)$", RegexOptions.IgnoreCase) 

    If reg_exp_10.IsMatch(anyNumber) Then 
     Dim areacode As String = HRITS.Constants.DEFAULT_STRING_VALUE 
     Dim prefix As String = HRITS.Constants.DEFAULT_STRING_VALUE 
     Dim suffix As String = HRITS.Constants.DEFAULT_STRING_VALUE 
     Dim loadExtension As Boolean = False 
     Dim count As Integer = 0 
     'for each char in anynumber, is it a number? concatenate it onto holder number 
     For Each i As Char In anyNumber 
      'first 3 hits, load areacode 
      If count < 3 Then 
       If Char.IsDigit(i) Then 
        areacode = String.Concat(areacode, i) 
        count = count + 1 
       End If 
      End If 
      'second 3 hits, load prefix 
      If count >= 3 AndAlso count < 6 Then 
       If Char.IsDigit(i) Then 
        prefix = String.Concat(prefix, i) 
        count = count + 1 
       End If 
      End If 
      'third 4 hits, load suffix 
      If count >= 6 AndAlso count < 10 Then 
       If Char.IsDigit(i) Then 
        suffix = String.Concat(suffix, i) 
        count = count + 1 
       End If 
      End If 

      If count >= 10 Then 
       If i.ToString = "x" Then 
        loadExtension = True 
       ElseIf i.ToString = "e" Then 

       End If 
      End If 

     Next 
    Else 
     Throw New Exception(ErrorMessages.PhoneNumber.INVALID_NUMBER) 
    End If 

End Sub 

有什麼想法嗎?

+0

Uuuh ...你爲什麼不用你的正則表達式來解析呢? – 2010-01-25 23:01:37

+0

簡短的回答:我不知道如何,不知道我可以:) – Watki02 2010-01-25 23:31:46

+1

無論你做什麼,不要把它作爲一個網頁上的驗證器來實現,充其量當你不得不「補償」一個電話號碼或郵政編碼,因爲你真正的不是美國人,最糟糕的情況是你驅走了合法用戶。 – Zano 2010-01-25 23:41:02

回答

1

這裏,我們去:分別

/(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)/ 

區號,前綴,後綴,擴展在捕獲1〜4組。

+0

這隻讓我開始朝着正確的方向發展,但我想出瞭如何使用Dot net正則表達式的東西。我對關鍵詞「捕獲組」一無所知。 – Watki02 2010-01-29 17:00:52