You need to enable JavaScript to run this app. VBA使用Asc函数校验邮箱非法字符返回结果错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

VBA使用Asc函数校验邮箱非法字符返回结果错误如何解决

问题根因

  1. VBA 不支持连续比较表达式
    你代码中(58 < xChar < 64)、(90 < xChar < 97)这类写法不符合VBA语法规则,VBA会按从左到右顺序分步计算:
  • 第一步先判断58 < xChar,得到布尔值True(对应数值-1)或False(对应数值0)
  • 第二步再用第一步得到的数值和64比较,比如xChar=97(小写a,合法字符),第一步58<97返回True=-1,第二步-1 < 64也返回True,最终整个条件判定为成立,所以第一个合法的a字符也会被误判为非法,导致始终返回1。
  1. 合法字符的ASCII范围判定逻辑错误
    你当前的判断条件没有正确覆盖要求的合法字符(数字、字母、@、_、.),包括点.、@、下划线_都不在你设定的合法范围内,也会导致误判。

修正后代码

Function FirstNotValid(xStr As String) As Long
    Dim xChar As Integer
    Dim I As Integer
    ' 初始返回0代表所有字符都合法
    FirstNotValid = 0
    For I = 1 To Len(xStr)
        xChar = Asc(Mid(xStr, I, 1))
        ' 拆分判断条件,明确合法范围,不在合法范围即返回当前位置
        If Not ( _
            (xChar >= 48 And xChar <= 57) Or _ ' 数字0-9
            (xChar >= 65 And xChar <= 90) Or _ ' 大写字母A-Z
            (xChar >= 97 And xChar <= 122) Or _ ' 小写字母a-z
            xChar = 64 Or _ ' @符号
            xChar = 46 Or _ ' 点符号.
            xChar = 95 _ ' 下划线_
        ) Then
            FirstNotValid = I
            Exit For
        End If
    Next
End Function

Sub test()
    Debug.Print FirstNotValid("ab?!an@gmail.com") ' 输出3,符合预期
End Sub

内容的提问来源于stack exchange,提问作者Binnnnn5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 03:36:05