'删除字符串里的非数字 Private Sub Command1_Click() Dim s As String, s1 As String, s2 As String Dim i As Longs = "adsk312131kxc,21123k12j`" s2 = "" For i = 1 To Len(s) s1 = Mid$(s, i, 1) If s1 >= "0" And s1 <= "9" Then s2 = s2 & s1 End If Next MsgBox s2 End Sub
Option ExplicitPrivate Sub Command1_Click() Dim i As Integer Dim s As String Dim strtemp As String
Text1.Text = "012@43!" For i = 1 To Len(Me.Text1.Text) s = Mid(Text1.Text, i, 1) Debug.Print Asc(s) '48-57 If Asc(s) > 47 And Asc(s) < 58 Then strtemp = strtemp & s End If Next i Text2.Text = strtemp End Sub
建议使用 正则表达式符合以后 开发工具(.net,Java)的使用趋势
用 VB 的 Like 运算符 用来比较两个字符串。语法result = string Like patternLike 运算符的语法具有以下几个部分:部分 描述 result 必需的;任何数值变量。 string 必需的;任何字符串表达式。 pattern 必需的;任何字符串表达式,遵循“说明”中的模式匹配约定。 说明如果 string 与 pattern 匹配,则 result 为 True;如果不匹配,则 result 为 False。但是如果 string 或 pattern 中有一个为 Null,则 result 为 Null。Like 运算符的特性随着 Option Compare 语句而不同。每个模块的缺省字符串比较方法是 Option Compare Binary。在字符串比较中,Option Compare Binary 的结果是根据字符的内部二进制表示法导出的排序顺序得到的。在 Microsoft Windows 中,排序顺序由代码页决定。下例说明通常二进制的排序顺序:A < B < E < Z < a < b < e < z < _ < _ < _ < _ < _ < ?/FONT>在字符串比较中,Option Compare Text 的结果是字符串比较,它建立在不区分大小写的文本排序顺序基础上,而这一排序顺序是由系统的国别确定的。在对相同的字符使用 Option Compare Text 时会产生以下文本排序顺序:(A=a) < (_=_) < (B=b) < (E=e) < (_=_) < (Z=z) < (_=_) 内建的模式匹配功能提供了多种工具来进行字符串比较。有了模式匹配功能就可以使用通配符、字符串列表或字符区间的任何组合来匹配字符串。下列表格指出 pattern 中允许的字符以及它们与什么进行匹配:pattern 中的字符 符合 string 中的 ? 任何单一字符。 * 零个或多个字符。 # 任何一个数字 (0–9)。 [charlist] charlist.中的任何单一字符。 [!charlist] 不在 charlist 中的任何单一字符。 在中括号 ([ ]) 中,可以用由一个或多个字符 (charlist) 组成的组与 string 中的任一字符进行匹配,这个组几乎包括任何一个字符代码以及数字。注意 为了与左括号 ([)、问号 (?)、数字符号 (#) 和星号 (*) 等特殊字符进行匹配,可以将它们用方括号括起来。不能在一个组内使用右括号 (]) 与自身匹配,但在组外可以作为个别字符使用。通过在范围的上、下限之间用连字符 (–),charlist 可以指定字符的范围。例如,如果 string 中相应字符的位置包括 A–Z 之间的任意大写字母,则 [A-Z] 得到一个匹配。不需要分界符,方括号内就可以包括多个范围。指定范围的意义取决于运行时的有效字符排序(正如 Option Compare 和系统的国别设置所确定的,代码在运行之中)。使用 Option Compare Binary 示例可以看到,范围 [A–E] 与 A、B 和 E 相匹配。通过 Option Compare Text 可以看到,[A–E] 与 A, a, _, _, B, b, E, e 相匹配。此范围与 _ 或 _ 不匹配,因为按照排序顺序,重音字符在非重音字符之后。下面列举的是模式匹配的其它重要规则: charlist 开头的惊叹号 (!) 意味着,如果在 string 中找到任何不属于 charlist 的字符,则存在一个匹配。如果在方括号之外使用惊叹号,则惊叹号与自身匹配。 连字符 (–) 可以出现在 charlist 的开头(如果使用惊叹号,则在惊叹号之后),也可以出现在 charlist 的结尾与自身匹配。在任何其它地方,连字符用来识别字符的范围。 当指定了字符范围时,这些字符必须按照升序(从最小到最大)顺序来显示。[A-Z] 是有效模式,但 [Z-A] 不是。 字符序列 [] 被看作是长度为零的字符串 ("")。 某些语言的字母表中有一些特殊字符,它们表示两个分开的字符。例如,在一些语言中,当字符 "a" 与 "e" 同时出现时,用 "_" 来表示字符 "a" 与 "e"。Like 运算符可以辨认出单一的特殊字符和两个个别字符是否相等。当一个语言使用了一个特殊字符,而且这个字符在系统地区设置中已被指定的时候,在 pattern 或 string 中出现的单一特殊字符将与其他字符串中等价的两个字符相匹配。与此相似,由方括号括起来的 pattern 中的单一特殊字符(字符本身在列表或范围内)将与 string 中等价的两个字符序列匹配。
Public Function IsExtOther(m_str As String) As Integer Dim m_chr As String While (Len(m_str)) m_chr = Right(m_str, 1) If m_chr < "0" Or m_chr > "9" Then IsExtOther = 1 Exit Function End If m_str = Mid(m_str, 1, Len(m_str) - 1) Wend IsExtOther = 0 End FunctionPrivate Sub Command1_Click() If IsExtOther(Text1.Text) Then MsgBox "存在" End Sub
我看你的问题可以这样想:你只需要字符串中含有数字,那么就是说如果判断字符串是不是数字的话,就能检测出来了吧。例如 strTemp是需要检测的字符串,那么if Isnumeric(strTemp) then 就可以判断是否是数字了,但是这里保还有几种情况,例如小数(也许你容忍小数),空格(空格可以用Instr(strTemp," ")检测出来),刚刚好凑成科学计数法(例如:1.214e-12,这也太巧合了吧,也许你也可以容忍这种也讲不好哦),但最简单的方法我想就是IsNumeric来判断了
Private Sub Command1_Click()
Dim s As String, s1 As String, s2 As String
Dim i As Longs = "adsk312131kxc,21123k12j`"
s2 = ""
For i = 1 To Len(s)
s1 = Mid$(s, i, 1)
If s1 >= "0" And s1 <= "9" Then
s2 = s2 & s1
End If
Next
MsgBox s2
End Sub
Option ExplicitPrivate Sub Command1_Click()
Dim i As Integer
Dim s As String
Dim strtemp As String
Text1.Text = "012@43!"
For i = 1 To Len(Me.Text1.Text)
s = Mid(Text1.Text, i, 1)
Debug.Print Asc(s)
'48-57
If Asc(s) > 47 And Asc(s) < 58 Then
strtemp = strtemp & s
End If
Next i
Text2.Text = strtemp
End Sub
用来比较两个字符串。语法result = string Like patternLike 运算符的语法具有以下几个部分:部分 描述
result 必需的;任何数值变量。
string 必需的;任何字符串表达式。
pattern 必需的;任何字符串表达式,遵循“说明”中的模式匹配约定。
说明如果 string 与 pattern 匹配,则 result 为 True;如果不匹配,则 result 为 False。但是如果 string 或 pattern 中有一个为 Null,则 result 为 Null。Like 运算符的特性随着 Option Compare 语句而不同。每个模块的缺省字符串比较方法是 Option Compare Binary。在字符串比较中,Option Compare Binary 的结果是根据字符的内部二进制表示法导出的排序顺序得到的。在 Microsoft Windows 中,排序顺序由代码页决定。下例说明通常二进制的排序顺序:A < B < E < Z < a < b < e < z < _ < _ < _ < _ < _ < ?/FONT>在字符串比较中,Option Compare Text 的结果是字符串比较,它建立在不区分大小写的文本排序顺序基础上,而这一排序顺序是由系统的国别确定的。在对相同的字符使用 Option Compare Text 时会产生以下文本排序顺序:(A=a) < (_=_) < (B=b) < (E=e) < (_=_) < (Z=z) < (_=_) 内建的模式匹配功能提供了多种工具来进行字符串比较。有了模式匹配功能就可以使用通配符、字符串列表或字符区间的任何组合来匹配字符串。下列表格指出 pattern 中允许的字符以及它们与什么进行匹配:pattern 中的字符 符合 string 中的
? 任何单一字符。
* 零个或多个字符。
# 任何一个数字 (0–9)。
[charlist] charlist.中的任何单一字符。
[!charlist] 不在 charlist 中的任何单一字符。
在中括号 ([ ]) 中,可以用由一个或多个字符 (charlist) 组成的组与 string 中的任一字符进行匹配,这个组几乎包括任何一个字符代码以及数字。注意 为了与左括号 ([)、问号 (?)、数字符号 (#) 和星号 (*) 等特殊字符进行匹配,可以将它们用方括号括起来。不能在一个组内使用右括号 (]) 与自身匹配,但在组外可以作为个别字符使用。通过在范围的上、下限之间用连字符 (–),charlist 可以指定字符的范围。例如,如果 string 中相应字符的位置包括 A–Z 之间的任意大写字母,则 [A-Z] 得到一个匹配。不需要分界符,方括号内就可以包括多个范围。指定范围的意义取决于运行时的有效字符排序(正如 Option Compare 和系统的国别设置所确定的,代码在运行之中)。使用 Option Compare Binary 示例可以看到,范围 [A–E] 与 A、B 和 E 相匹配。通过 Option Compare Text 可以看到,[A–E] 与 A, a, _, _, B, b, E, e 相匹配。此范围与 _ 或 _ 不匹配,因为按照排序顺序,重音字符在非重音字符之后。下面列举的是模式匹配的其它重要规则: charlist 开头的惊叹号 (!) 意味着,如果在 string 中找到任何不属于 charlist 的字符,则存在一个匹配。如果在方括号之外使用惊叹号,则惊叹号与自身匹配。
连字符 (–) 可以出现在 charlist 的开头(如果使用惊叹号,则在惊叹号之后),也可以出现在 charlist 的结尾与自身匹配。在任何其它地方,连字符用来识别字符的范围。
当指定了字符范围时,这些字符必须按照升序(从最小到最大)顺序来显示。[A-Z] 是有效模式,但 [Z-A] 不是。
字符序列 [] 被看作是长度为零的字符串 ("")。
某些语言的字母表中有一些特殊字符,它们表示两个分开的字符。例如,在一些语言中,当字符 "a" 与 "e" 同时出现时,用 "_" 来表示字符 "a" 与 "e"。Like 运算符可以辨认出单一的特殊字符和两个个别字符是否相等。当一个语言使用了一个特殊字符,而且这个字符在系统地区设置中已被指定的时候,在 pattern 或 string 中出现的单一特殊字符将与其他字符串中等价的两个字符相匹配。与此相似,由方括号括起来的 pattern 中的单一特殊字符(字符本身在列表或范围内)将与 string 中等价的两个字符序列匹配。
Dim m_chr As String
While (Len(m_str))
m_chr = Right(m_str, 1)
If m_chr < "0" Or m_chr > "9" Then
IsExtOther = 1
Exit Function
End If
m_str = Mid(m_str, 1, Len(m_str) - 1)
Wend
IsExtOther = 0
End FunctionPrivate Sub Command1_Click()
If IsExtOther(Text1.Text) Then MsgBox "存在"
End Sub
Function IsNumeric(Expression) As Boolean
如果能够将表达式转换成数值型,返回 True