2010-06-21 8 views
7

wie die frage sagt. Ich bekomme Nummern wie 2125550938 oder 20298277625552. Diese sollten zu (212) 555-0938 bzw. (202) 982-7762 x 5552 wechseln. dies ist in vb.netformat eine string zu usa-telefonnummer in vb.net

+0

möglich Duplikat [Wie eine Zeichenfolge als eine Telefonnummer in C# zu formatieren] (http://stackoverflow.com/questions/188510/how-to-format-a-string-as-a-telephone -number-in-c) obwohl in VB.NET statt C#. –

+0

vb.net =/= C#, imho – maxwellb

Antwort

0
Dim newNumber As New String 
If number.Length = 10 Then 
    newNumber = "(" & number.Substring(0, 3) & ") " & number.Substring(2, 3) & "-" & number.Substring(5, 4) 
ElseIf number.Length = 14 Then 
    newNumber = "(" & number.Substring(0, 3) & ") " & number.Substring(2, 3) & "-" & number.Substring(5, 4) & " x " & number.Substring(9) 
End if 
+0

Ich würde Länge = 14, zu Länge> 10 ändern – maxwellb

3

ich wahrscheinlich mit einer Implementierung von regulären Ausdrücken, so etwas wie dies gehen würde:

Dim phoneNumbers() As String = {"2125550938", _ 
     "20298277625552", _ 
     "2025551212378", _ 
     "202555131345943"} 

    Dim ext As String = "" 

    Dim r As New Regex("^(?<AC>\d{3})(?<First>\d{3})(?<Last>\d{4})(?<Ext>\d*$)") 
    Dim m As Match 

    For i As Int32 = 0 To (phoneNumbers.Length - 1) 
     m = r.Match(phoneNumbers(i)) 
     If m.Groups("Ext").Length > 0 Then 
      ext = " x " & CStr(m.Groups("Ext").Value) 
     Else 
      ext = "" 
     End If 
     Console.WriteLine("({0}) {1}-{2}{3}", _ 
      CStr(m.Groups("AC").Value), _ 
      CStr(m.Groups("First").Value), _ 
      CStr(m.Groups("Last").Value), ext) 
    Next 

    Console.Read() 

Diese erlauben würde, für Telefonnummern ohne Erweiterungen oder mit einer variablen Länge Verlängerung.

2

öffentliches Gemeinschafts-Funktion PhoneFormat (ByVal strPhoneNumber As String) As String

' Remove any style characters from the user input 
strPhoneNumber = Replace(strPhoneNumber, ")", "") 
strPhoneNumber = Replace(strPhoneNumber, "(", "") 
strPhoneNumber = Replace(strPhoneNumber, "-", "") 
strPhoneNumber = Replace(strPhoneNumber, ".", "") 
strPhoneNumber = Replace(strPhoneNumber, Space(1), "") 

Dim strFormatedNumber As String = CLng(strPhoneNumber).ToString("(###) ###-####") 
Return strFormatedNumber 

End Function

8

den folgenden Versuchen Sie bei der Verwendung von String.Format in VB.NET:

String.Format("{0:(###) ###-####}", Long.Parse(PhoneString)) 
1

Hier ist eine Kombination aus Regex und String-Formatierung, die ziemlich gut für mich funktioniert. Fügen Sie einfach Salz zu einem Rezept hinzu und es schmeckt GROSS!

''' <summary> 
''' returned formats are: 
''' example1    (620) 123-4567 Ext: 890 
''' example2      123-4567 Ext: 890 
''' example3    (620) 123-4567 
''' example4      123-4567 
''' The user can input a 7 or 10 digit number followed by a character(s) and digits for the extension 
''' 
''' </summary> 
''' <param name="OriginalNumber"></param> 
''' <returns></returns> 
''' <remarks></remarks> 
Public Function FormatPhone(ByVal OriginalNumber As String) As String 

    Dim sReturn As String 
    Dim tester() As String 
    Dim R As Regex 
    Dim M As Match 
    Dim sTemp As String 

    sReturn = "" 
    ' removes anything that is not a digit or letter 
    sTemp = UnFormatPhone(OriginalNumber) 
    ' splits sTemp based on user input of character(s) to signify an extension i.e. x or ext or anything else you can think of (abcdefg...) 
    tester() = Regex.Split(sTemp, "\D+") 
    ' if the string was split then replace sTemp with the first part, i.e. the phone number less the extension 
    If tester.Count > 1 Then 
     sTemp = tester(0) 
    End If 
    ' Based on the NANP (North American Numbering Plan), we better have a 7 or 10 digit number. anything else will not parse 
    If sTemp.Length = 7 Then 
     R = New Regex("^(?<First>\d{3})(?<Last>\d{4})") 
    ElseIf sTemp.Length = 10 Then 
     R = New Regex("^(?<AC>\d{3})(?<First>\d{3})(?<Last>\d{4})") 
    Else 
     Return OriginalNumber 
    End If 
    ' now format the phone number nice and purtee... 
    M = R.Match(sTemp) 
    If m.Groups("AC").Length > 0 Then 
     sReturn &= String.Format("({0}) {1}-{2}", CStr(m.Groups("AC").Value), CStr(m.Groups("First").Value), CStr(m.Groups("Last").Value)) 
    Else 
     sReturn &= String.Format("{0}-{1}", CStr(m.Groups("First").Value), CStr(m.Groups("Last").Value)) 
    End If 
    If tester.Count > 1 Then 
     sReturn &= " Ext: " + tester(1) 
    End If 
    Return sReturn 

End Function 

''' <summary> 
''' Strips NON ALPHANUMERICS from a string 
''' 
''' </summary> 
''' <param name="sTemp"></param> 
''' <returns></returns> 
''' <remarks></remarks> 
Public Function UnFormatPhone(ByVal sTemp As String) As String 
    sTemp = ClearNull(sTemp) 
    Dim sb As New System.Text.StringBuilder 
    For Each ch As Char In sTemp 
     If Char.IsLetterOrDigit(ch) OrElse ch = " "c Then 
      sb.Append(ch) 
     End If 
    Next 
    UnFormatPhone = sb.ToString 

End Function 

''' <summary> 
''' Returns a trimmed string with vbNullChar replaced by a blank 
''' </summary> 
''' <param name="sTemp"></param> 
''' <returns></returns> 
''' <remarks></remarks> 
Public Function ClearNull(ByRef sTemp As String) As String 
    sTemp = Replace(sTemp, vbNullChar, "") 
    ClearNull = Trim(sTemp) 
End Function