0

我应该先声明 Visual Basic 不是我的母语,但我正在维护一个遗留程序,直到它可以移植到不同的语言。

我们有一个用于输入数量的文本框。此数量应仅为整数,并且未经验证。一个小数潜入数据库,我被要求添加输入验证。我试过一个正则表达式。

Function validate_qty(qty As String)
    Dim objRegExp As New System.Text.RegularExpressions.Regex("^\d+$")
    Dim match As System.Text.RegularExpressions.Match = objRegExp.Match(qty)
    If match.Success Then
        Return True
    End If
    Return False
End Function

就小数点而言,这是有效的:.11.0返回 false;但是,字母数字字符串,例如a1212or433498e返回True

有什么见解吗?这将不胜感激。

4

4 回答 4

2

除了缩短功能外,我看不出您的 RegEx 有问题...

Private Function validate_qty(Byval qty As String) As Boolean
   Dim objRegExp As New System.Text.RegularExpressions.Regex("^\d+$")
   Return objRegExp.Match(qty).Success
End Function

另一种选择是使用静态Integer.TryParse...

Private Function validate_qty(Byval qty As String) As Boolean
   Return Integer.TryParse(qty, Nothing)
End Function
于 2013-07-02T17:46:41.100 回答
1

我认为您还不需要正则表达式..

Function validate_qty(qty As String) As Boolean
    if qty.Contains(".") then Return False
    Return IsNumeric(qty)
End Function
于 2013-07-02T17:38:01.223 回答
0

您可以创建一个返回“已清理”字符串的函数(即删除了任何非数字的函数)

Public Function KeepNumbers(input As String) As String
    Dim sb As New StringBuilder()
    For Each c As Char In input
        If [Char].IsDigit(c) Then
            sb.Append(c)
        End If
    Next
    Return sb.ToString()
End Function
于 2013-07-02T17:38:15.997 回答
0

我也看不到你的错误可能在你的正则表达式上

但尝试。

btnSave/formload()
dim num as new regex("^\d+$")

if num.Ismatch(yourtextbox1.text) then    
    yourtextbox1.text="num" 

else 
    yourtextbox.text="invalid num"
    exit sub

end if

在此之后,您接受它是否正确,或者如果它不正确,则通过“exit sub”终止。

于 2017-02-14T08:44:34.793 回答