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



>我有 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,依此类推。

我可以以某种方式通过将字符串输入转换为 Int 来解决此问题吗?

您需要先将数字解析为整数,然后才能比较它们,否则>"11"将按字母顺序而不是按数字顺序比较它们。

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

现在您知道该输入是否是正确的数字,如果不是,您可以显示警告。

我建议采用不同的方法来检查输入是否正确,因为您必须考虑该月的天数(还有闰年、不同的日历等)。因此,请使用当前区域的日历,并通过以下方式查看给定月份的天数是否正确:

Dim daysInMonth = CultureInfo.CurrentCulture.Calendar.GetDaysInMonth(year, month)
If day > daysInMonth OrElse day < 1 Then
    ' show warning '
End If

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

比从后面的代码中执行此操作更好,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>

看看吧

你的问题是,"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",您可以测试字符串是否可以转换为整数(或Double,Single,任何实现TryParse方法的方法),如果可以转换,则该值存储在第二个参数中。

你应该使用Strict on"来避免编码问题 - 基本上你是在比较字符串。它们的行为不像整数进行比较。

尝试如下:(假设框架高于/或 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 .如果第一个条件失败,则不会评估第二个条件。

最新更新