我是vbscript和Stack Overflow的新手,可以真正使用一些帮助。
目前,我正在尝试格式化从图像中读取并存储在变量中的电话号码。因为图像是“脏的”,所以额外的角色会进入,例如句点或括号。我已经尽可能地限制了这个领域,以帮助阻止额外的角色,但是唉!
例如,我想将“123.4567890”变成“123 456 7890”(不包括双引号)。麻烦的是我不知道可能会有多余的角色被拿走,排除了简单的替换。
我的逻辑是删除任何非数字字符,从左边开始,在第三个数字后插入一个空格,在第六个数字后插入一个空格。
任何帮助都会很棒,如果需要,请随时询问更多信息。
答案 0 :(得分:4)
欢迎使用Stack Overflow。您可以使用Regex删除非数字,使用concatenate功能删除部分Mid。
例如:
Dim sTest
sTest = ",123.4567890"
With (New RegExp)
.Global = True
.Pattern = "\D" 'matches all non-digits
sTest = .Replace(sTest, "") 'all non-digits removed
End With
WScript.Echo Mid(sTest, 1, 3) & " "& Mid(sTest, 4, 3) & " "& Mid(sTest, 7, 4)
或完全使用正则表达式(通过第二个分组模式):
Dim sTest
sTest = ",123.4567890"
With (New RegExp)
.Global = True
.Pattern = "\D" 'matches all non-digits
sTest = .Replace(sTest, "") 'all non-digits removed
.Pattern = "(.{3})(.{3})(.{4})" 'grouping
sTest = .Replace(sTest, "$1 $2 $3") 'formatted
End With
WScript.Echo sTest
答案 1 :(得分:1)
使用第一个RegEx清除输入中的非数字,第二个使用布局组:
Function cleanPhoneNumber( sSrc )
Dim reDigit : Set reDigit = New RegExp
reDigit.Global = True
reDigit.Pattern = "\D"
Dim reStruct : Set reStruct = New RegExp
reStruct.Pattern = "(.{3})(.{3})(.+)"
cleanPhoneNumber = reStruct.Replace( reDigit.Replace( sSrc, "" ), "$1 $2 $3" )
End Function ' cleanPhoneNumber