【问题标题】:Microsoft Access: Strip phone numbers from feed that are all over the placeMicrosoft Access:从无处不在的提要中删除电话号码
【发布时间】:2019-04-22 18:52:50
【问题描述】:

在 Microsoft Access 中,我收到需要处理并符合标准格式的电话号码提要,以便在另一个系统中进行后处理。我得到的数字到处都是。它们来自许多国家/地区,可能包括特殊字符、空格、括号、字母,有些有扩展名,而另一些则没有,而且并非所有都有区号。尽管如此,我仍需要在所有数字中将其格式化为相同的格式。这是我正在查看的内容...

Ex.

+1_(860)_5666344_x_4454  <--- All _'s are spaces in the string

Convert To

8605666344

你看,我们有一些特殊的考虑,例如:

1) 国际号码,国家代码可以是任何东西。例如,美国国家代码+1 但区号246 可能看起来像是巴巴多斯的国家代码+1 246,而实际上它是美国区号(246)。我需要考虑这一点

2) 我需要删除所有特殊字符、空格、字母(扩展名 X)、括号

3) 我需要删除所有扩展名,这些扩展名总是以x 开头,尽管后面并不总是有空格。

4) 在某些情况下,我什至不包括区号。尽管如此,必须执行其他规则(无扩展名、无特殊字符、无国家代码和无空格)

【问题讨论】:

    标签: sql ms-access formatting phone-number


    【解决方案1】:

    数据结构的一致性在字符串操作中至关重要。构建一个 VBA 自定义函数来处理这些数据。

    首先,尝试嵌套 Replace() 函数来移除括号,s 代表示例数据字符串:

    Replace(Replace(s,"(",""),")","")

    获取该值并运行If Then 块以测试“x”字符以及是否存在截断字符串。然后另一个If Then 测试“+”字符,如果存在则删除前缀。

    使用 InStr、InStrRev、Mid、Left、Right、Len 字符串操作函数。另一个 Replace() 可以删除空格或使用 Val()。

    基于给定样本数据的一个非常简单的代码示例:

    Function ExtractPhoneNum(s As String) As String
    Dim strS As String
    strS = Replace(Replace(s, "(", ""), ")", "")
    If InStr(strS, "x") <> 0 Then strS = Left(strS, InStr(strS, "x") - 1)
    If InStr(strS, "+") <> 0 Then strS = Mid(strS, InStr(strS, " ") + 1)
    ExtractPhoneNum = Val(strS)
    End Function
    

    【讨论】:

      【解决方案2】:

      您可以将数字清理为一行:

      Phone = "+1 (860) 566-6344 x4454"
      CleanPhone = Split(Replace(Replace(Replace(Replace(t, " ", ""), "(", ""), ")", ""), "-", ""), "x")(0)
      
      CleanPhone -> "+18605666344"
      

      但如果第一个字符是“+”,则出现的国际拨号代码可以采用 1 到 4 位数字。因此,您必须查找这些表以找到匹配项。这些可以在许多来源中找到 - 一个在这里:

      Wikipedia: List of country calling codes

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多