VB中Select Case筛选字母数字时V/W/X/Y/Z失效求助
VB中Select Case筛选字母数字时V-Z/v-z失效的问题解决
问题现象
使用两种Select Case方法筛选字符串仅保留数字、字母(含空格)时,字母表最后五个字母(V、W、X、Y、Z及对应小写)被错误过滤。测试字符串0123AaBbCcwWxXyYzZ!@#的输出结果为0123AaBbCc,不符合预期的0123AaBbCcwWxXyYzZ。
问题根源
原代码存在语法结构错误:两种实现方法的代码未正确隔离,导致Select Case语句错误嵌套且缺少必要的End Select,使得实际执行的判断逻辑与预期不符。两种方法本身的匹配规则(ASCII码范围、字符列表)是正确的,但结构错误导致规则未生效。
修正后的代码实现
方法1:基于ASCII码判断
Function AlphaNumericOnly(strSource As String) As String ' 仅保留数字、字母和空格 Dim i As Integer Dim strResult As String strSource = Trim(strSource) For i = 1 To Len(strSource) Select Case Asc(Mid(strSource, i, 1)) ' 匹配空格、数字(0-9)、大写字母(A-Z)、小写字母(a-z) Case 32, 48 To 57, 65 To 90, 97 To 122 strResult = strResult & Mid(strSource, i, 1) End Select Next i AlphaNumericOnly = strResult End Function
方法2:直接匹配字符范围(更简洁)
Function AlphaNumericOnly(strSource As String) As String ' 仅保留数字、字母和空格 Dim i As Integer Dim strResult As String strSource = Trim(strSource) For i = 1 To Len(strSource) Select Case Mid(strSource, i, 1) ' 直接用范围匹配,无需逐个列出字符 Case "0" To "9", "A" To "Z", "a" To "z", " " strResult = strResult & Mid(strSource, i, 1) End Select Next i AlphaNumericOnly = strResult End Function
验证说明
修正后的代码会正确匹配所有数字、字母(含V-Z/v-z)和空格,测试字符串0123AaBbCcwWxXyYzZ!@#将输出预期结果0123AaBbCcwWxXyYzZ。
内容的提问来源于stack exchange,提问作者phil borer
相关产品推荐
相关产品推荐

