【问题标题】:format a string to usa phone number in vb.net在 vb.net 中将字符串格式化为美国电话号码
【发布时间】:2011-03-06 12:33:50
【问题描述】:

正如问题所说。我得到像 2125550938 或 20298277625552 这样的数字。这些应该分别更改为 (212) 555-0938 和 (202) 982-7762 x 5552。这是在 vb.net 中

【问题讨论】:

标签: vb.net string format


【解决方案1】:

这是正则表达式和字符串格式的组合,对我来说效果很好。只需在食谱中添加盐,味道就会很棒!

''' <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 

【讨论】:

    【解决方案2】:

    在 VB.NET 中使用 String.Format 时尝试以下操作:

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

    【讨论】:

      【解决方案3】:

      我可能会使用正则表达式的实现,如下所示:

          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()
      

      这将允许电话号码不带扩展名或具有可变长度扩展名。

      【讨论】:

        【解决方案4】:

        公共共享函数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
        

        结束函数

        【讨论】:

          【解决方案5】:
          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 
          

          【讨论】:

          • 我会将 Length = 14 更改为 Length > 10
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-10-03
          • 2010-10-14
          • 2023-04-03
          • 1970-01-01
          • 2011-06-12
          • 1970-01-01
          • 2016-11-07
          相关资源
          最近更新 更多