在Microsoft Access中,我收到一个电话号码供稿,该电话号码需要处理并符合标准格式,以便在另一个系统中进行后处理。我给的数字到处都是。它们来自许多国家/地区,是国际性的,可能包括特殊字符,空格,parens,字母,有些带有扩展名,而有些则没有,也不都是带有区号。尽管如此,我仍需要在所有数字上均等地设置其格式。这就是我正在看的...
Ex.
+1_(860)_5666344_x_4454 <--- All _'s are spaces in the string
Convert To
8605666344
您知道,我们有一些特殊的考虑因素,例如:
1)国际号码,国家/地区代码可以是任何数字。因此,例如,美国国家代码为+1
,而区域代码为246
看起来像是巴巴多斯的国家代码为+1 246
,而实际上却是美国区域代码为{ {1}}。我需要解决这个问题
2)我需要删除所有特殊字符,空格,字母(扩展名X),括号。
3)我需要删除所有扩展名,这些扩展名总是以(246)
开头,尽管后面不一定总是有空格。
4)在某些情况下,甚至不包括区号。尽管如此,还必须执行其他规则(没有扩展名,没有特殊字符,没有国家代码和空格)
答案 0 :(得分:0)
数据结构的一致性对于字符串操作至关重要。构建一个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
答案 1 :(得分:0)
您可以在一行中清除数字:
Phone = "+1 (860) 566-6344 x4454"
CleanPhone = Split(Replace(Replace(Replace(Replace(t, " ", ""), "(", ""), ")", ""), "-", ""), "x")(0)
CleanPhone -> "+18605666344"
但是,如果第一个字符为“ +”,则显示的国际拨号代码可以使用1到4位数字。因此,您必须查找这些表格以找到匹配项。这些可以在许多来源找到-一个在这里: