必須有一種更簡單的方法才能做到這一點。從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
有什麼想法嗎?
Uuuh ...你爲什麼不用你的正則表達式來解析呢? – 2010-01-25 23:01:37
簡短的回答:我不知道如何,不知道我可以:) – Watki02 2010-01-25 23:31:46
無論你做什麼,不要把它作爲一個網頁上的驗證器來實現,充其量當你不得不「補償」一個電話號碼或郵政編碼,因爲你真正的不是美國人,最糟糕的情況是你驅走了合法用戶。 – Zano 2010-01-25 23:41:02