You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB程序空输入触发ArgumentOutOfRangeException,如何添加医保卡号输入提示?

嘿,我来帮你解决这个程序崩溃的问题!

你的代码之所以会触发ArgumentOutOfRangeException,是因为当文本框为空(或者输入内容长度不足12位)时,调用Substring方法根本找不到足够的字符去截取——空字符串连1个字符都没有,更别说要取4个了!

咱们只需要在执行字符串截取之前先做输入校验,提前拦住错误情况并给用户友好提示,就能彻底避免崩溃。下面是修改后的完整代码,我还额外加了格式合法性校验(确保前4位是字母、后8位是数字),让程序更严谨:

Dim numero As String 'Numéro d'assurance maladie
Dim lettre As String 'Quatre premières lettres
Dim chiffre1 As String 'Quatre premiers chiffres
Dim chiffre2 As String 'Quatre derniers chiffres

numero = txtNumero.Text.Trim() '先去掉前后空格,避免用户误输入空格影响判断

' 第一步:校验输入是否为空
If String.IsNullOrEmpty(numero) Then
    MsgBox("请输入您的医保卡号!", MsgBoxStyle.Exclamation, "输入错误")
    txtNumero.Focus() '让光标回到输入框,方便用户直接输入
    Exit Sub '直接退出当前过程,不执行后续代码
End If

' 第二步:校验总长度是否符合4字母+8数字的要求(总长度12位)
If numero.Length <> 12 Then
    MsgBox("医保卡号格式错误!请输入4个字母加8位数字,例如:LANS10763985", MsgBoxStyle.Exclamation, "格式错误")
    txtNumero.Focus()
    Exit Sub
End If

' 第三步:可选但更严谨的校验——确保前4位是字母,后8位是数字
Dim isFirstFourLetters As Boolean = True
For i As Integer = 0 To 3
    If Not Char.IsLetter(numero(i)) Then
        isFirstFourLetters = False
        Exit For
    End If
Next

Dim isLastEightDigits As Boolean = True
For i As Integer = 4 To 11
    If Not Char.IsDigit(numero(i)) Then
        isLastEightDigits = False
        Exit For
    End If
Next

If Not isFirstFourLetters Or Not isLastEightDigits Then
    MsgBox("医保卡号格式错误!前4位必须是字母,后8位必须是数字,例如:LANS10763985", MsgBoxStyle.Exclamation, "格式错误")
    txtNumero.Focus()
    Exit Sub
End If

' 所有校验通过后,再安全地截取字符串
lettre = numero.Substring(0, 4)
chiffre1 = numero.Substring(4, 4)
chiffre2 = numero.Substring(8, 4)

' 这里可以继续编写你后续的业务逻辑

关键修改说明:

  1. Trim()处理:避免用户不小心输入前后空格,导致长度判断出错
  2. 分层校验逻辑:从空输入→长度错误→格式错误,一步步拦截问题,给用户明确的提示
  3. 提前退出流程:一旦发现错误,就用Exit Sub终止当前过程,不会执行到后面会崩溃的截取代码

内容的提问来源于stack exchange,提问作者Stéphanie L'ange Renaud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:34:08