【问题标题】:Visual Basic - Input ValidationVisual Basic - 输入验证
【发布时间】:2015-05-20 19:33:01
【问题描述】:

我需要帮助解决一个小问题。我编程时间不长,不知道如何解决这个问题。我有一个学校的小项目,但我无法弄清楚为什么在验证输入时会出现此错误。

例如,我通过创建一个函数以根据输入的值返回真或假值来检查输入是否有效并且在最小和最大范围之间。我使用函数的原因是因为我正在执行多个类似的检查,并且我认为这是完成这项任务的最佳方式,而不是再次重写它。

Do While inputValid(string, min, max)

这是我的验证,下面是验证这个的简单函数。

Private Function inputValid(input As String, min As Integer, max As Integer)
    If Not IsNumeric(input) Then
        Return False
    End If

    If input > min Or input < max Then
        Return False
    Else
        Return True
    End If
End Function

出于某种原因,尽管它应该确保该值是数字,然后再检查它是否在数字范围内。当我没有输入任何内容或输入字符串时,它仍然会向我发送错误,因为它正在尝试将其转换为双精度,但如果我在范围检查之间没有做任何事情,它会检查它是否只是数字而没有错误。

谁能帮我解决这个问题?谢谢!

【问题讨论】:

    标签: validation


    【解决方案1】:

    您可以使用CInt 将字符串转换为整数

    Private Function inputValid(input As String, min As Integer, max As Integer)
        Dim v as Integer
        If Not IsNumeric(input) Then
            Return False
        End If
        v=CInt(input)
        If v < min Or v > max Then
            Return False
        Else
            Return True
        End If
    End Function
    

    【讨论】:

    • 这是我遇到的问题,我尝试了这样的事情,但它仍然不起作用,我只是不知道为什么。它会遇到同样的问题。我不明白它在什么时候尝试转换为双精度。
    【解决方案2】:

    使用正则表达式对字符串进行数字验证可能会更好

    Private Function inputValid(input As String, min As Integer, max As Integer)
        dim regex as new Regex("[\d]+")    
        If not regex.isMatch(input) OrElse cint(input) > min OrElse cint(input) < max Then
            Return False
        Else
            Return True
        End If
    End Function
    

    【讨论】:

    • 现在您引入了一个新问题:正则表达式。请注意,Regex.IsMatch("١٢٣", "[\d]+") 返回 True。在 .NET 中,\d 代表 \p{Nd} 除非您还指定了 RegexOptions.ECMAScript。 (参考:Decimal Digit Character)。显式指定 [0-9] 更安全。
    【解决方案3】:

    您可以使用Integer.TryParse 函数来检查字符串是否可以转换为整数。

    此外,您可以返回一个比较结果的布尔值:您可以使用Return x &gt; 4,而不是If x &gt; 4 Then Return True

    所以你的函数可能看起来像

    Private Function StringIsValidInteger(s As String, min As Integer, max As Integer) As Boolean
        Dim tmp As Integer
    
        If Integer.TryParse(s, tmp) Then
            Return (tmp >= min AndAlso tmp <= max)
        End If
    
        Return False
    
    End Function
    

    【讨论】:

      【解决方案4】:

      对不起,伙计们。我以错误的方式返回真假,因为我需要继续循环,它需要为真,而在常规验证中通常为假。

      只需在 inputValid 函数中更改 true 和 false 返回类型,它就可以正常工作。

      感谢你们的帮助。

      【讨论】:

      • 这表明您在选择函数名称时需要小心。另外,请注意 IsNumeric 对“1.2”、“1e2”和“&H2”等字符串返回 True。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      相关资源
      最近更新 更多