我只想知道是否可以检查字符串中特定位置是否有数字
Sub test()
Dim a As String
a = "TestTestTest12"
'If (the 13th and the 14th positon are numbers) Then ...
End Sub
答案 0 :(得分:1)
使用以下内容:
Function IsNumberAtPosition(s As String, pos As Integer) As Boolean
IsNumberAtPosition = IsNumeric(Mid(s, pos, 1))
End Function
用法:
IsNumberAtPosition("TestTestTest12", 13)
答案 1 :(得分:0)
这是我用来检查整个字符串的一些代码,只是想分享一下,但是如果您只想检查特定的部分,您已经有了更好的答案。
Sub test()
my_string = "TestTestTest12"
Dim buff() As String
ReDim buff(Len(my_string) - 1)
For i = 1 To Len(my_string)
buff(i - 1) = Mid$(my_string, i, 1)
char = buff(i - 1)
MsgBox char
If IsNumeric(char) = True Then
MsgBox char & " = Number"
End If
Next
End Sub
答案 2 :(得分:0)
我认为@EyIM答案几乎可以满足任何情况。但是我也喜欢@FreeSoftwareServers的思路。让我详细说明一下:一谈到位置,数组就感觉很自然。您想将字符串当作数组来对待。无论如何,我会的。因此,作为替代方案,并结合已经给出的答案,可能看起来像这样:
Option Explicit
Dim MyStringArray() As String
Dim str As String
'run example
Sub Test()
str = "TestTestTest12"
MyStringArray = StringToArray(str)
Debug.Print IsPositionNumeric(MyStringArray, 12)
Debug.Print IsPositionNumeric(MyStringArray, 13)
Debug.Print IsPositionNumeric(MyStringArray, 14)
End Sub
'return if character at position p in array arr is numeric
Function IsPositionNumeric(ByRef arr() As String, p As Integer) As Boolean
IsPositionNumeric = IsNumeric(arr(p - 1)) '- 1 because string position is 1-based
End Function
'take string s and make it into array
Function StringToArray(ByRef s As String) As String()
'define temp array
Dim tmpArray() As String
'set dimension of array to match string length
ReDim tmpArray(Len(s))
'assign each character in string s to array
Dim i As Integer
For i = 1 To Len(s)
tmpArray(i - 1) = Mid$(s, i, 1) 'remember that (by default), arrays are 0-bound, so - 1
Next i
StringToArray = tmpArray
End Function
这使您可以像对待数组一样访问字符串,就像.Net中的穷人版ToCharArray()
一样。当然,这可能是彻底的过度杀伤力。例如,它会对每个字符都执行“昂贵”的Mid(string, position, length)
,尽管只有一次。之后,您只需从数组中检索元素即可,这更快。因此,要测试的位置数与要测试的字符串的长度之间是一个平衡。
答案 3 :(得分:-1)
使用正则表达式: /(\ d +)/克 匹配并获得职位。