如何在Visual Basic中将文本框中的字符串检查为整数?

3

我有3个文本框(日、月、年),我想检查输入是否正确,例如,日必须在1到31之间等。

我的代码如下:

If InputDan.Text < "1" Or InputDan > "31" Then Warning.Text = "Not a valid day input." Else Warning.Text = ""

此外,我将日和月的输入限制为2个字符,年份限制为4个字符。对于10到31之间的数字,它可以正常工作,并在输入0或32及以上时适当地显示警告消息。
以下是问题所在...
当我输入4到9之间的数字时,它会显示一个警告消息,后来我发现程序将一个字符输入后的空格视为0。因此,如果我输入4,则程序将其读取为40,以此类推。
我能否通过将字符串输入转换为整数来解决这个问题?
5个回答

4

在比较数字之前,您需要将它们解析为整数,否则 >"11" 将按字母顺序比较它们而不是按它们的数字顺序。

Dim day As Integer
Dim valid As Boolean = Int32.TryParse(InputDan.Text, day)

现在你知道了输入是否是正确的数字,如果不是,可以显示警告。
我建议采用不同的方法来检查输入是否为正确的日期,因为你必须考虑到该月份的天数(还有闰年、不同的日历等)。因此,使用当前culture's calendar,以此方式查看给定月份的天数是否正确:
Dim daysInMonth = CultureInfo.CurrentCulture.Calendar.GetDaysInMonth(year, month)
If day > daysInMonth OrElse day < 1 Then
    ' show warning '
End If

(假设您已经使用 Int32.TryParse 检查了年份和月份部分)

1

与从代码后台执行相比,使用asp.net已经具备的验证功能会更好。以下是一个文本框的示例,用于表示日期,且必须在1到31之间:

<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

<asp:RangeValidator ID="RangeValidator1" runat="server" 
    ErrorMessage="You have to insert a valid day" ControlToValidate="TextBox2" MaximumValue="31" MinimumValue="1"></asp:RangeValidator>

请查看一下


我假设这是WinForms。 - Tim Schmelter

0
你的问题是,“9”(字符串)比“31”更大。因为排序是按照第一个字符,然后是第二个字符等进行的。
    Dim Value As Integer
    ' is there an (integer) NUMBER in the textbox?
    If Integer.TryParse(InputDan.Text, Value) Then
        If Value > 0 AndAlso Value < 31 Then
            ' do something
        Else
            MessageBox.Show("please enter a number!")
        End If
    Else
        MessageBox.Show("please enter a number!")
    End If

使用“TryParse”函数,您可以测试一个字符串是否可以转换为整数(或双精度浮点数、单精度浮点数等实现了TryParse方法的类型),如果可以转换,则将值存储在第二个参数中。

0

你应该使用 "Strict on" 来避免编程问题 - 基本上你是在将字符串相互比较。它们不像整数那样进行比较。


尽管“Strict On”也无法解决问题,因为从编译器的角度来看,一切都很好。他只是比较了两个字符串,但认为它们是“数字”。不幸的是,程序员的大脑没有“Strict On”这样的选项 ;) - igrimpe

0
尝试像这样做:(假设使用的是3.5版本或以上的框架)
If Not IsNumeric(InputDan.Text) OrElse _
   Not Enumerable.Range(1, 31).Contains(CInt(InputDan.Text)) Then
    Warning.Text = "Not a valid day input."
Else
    Warning.Text = ""
End If

它将首先验证输入必须是一个数字,然后验证它是否在1到31的范围内。我假设天数不能小于1.5,因此我调用了CInt

OrElse是我们称之为ShortCircuit。如果第一个条件失败,则不会评估第二个条件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接