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

我可以通过某种方式将 String 输入转换为 Int 来解决这个问题吗?

4

5 回答 5

4

您需要先将数字解析为整数,然后才能比较它们,否则>"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

于 2012-11-16T08:59:59.530 回答
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>

看看这个

于 2012-11-16T08:52:48.830 回答
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”,您可以测试是否可以将 String 转换为 Integer(或 Double、Single,无论实现 TryParse 方法),如果可以转换,则将值存储在第二个参数中。

于 2012-11-16T08:57:53.037 回答
0

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

于 2012-11-16T09:32:31.073 回答
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 的范围内。我认为 Days 不能,1.5所以我称之为CInt

OrElse就是我们所说ShortCircuit的。如果第一个条件失败,第二个条件将不会评估。

于 2012-11-16T10:28:04.880 回答