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

时间:2012-11-16 08:45:57

标签: vb.net string textbox

我有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来解决这个问题吗?

5 个答案:

答案 0 :(得分: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 :(得分: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>

检查出来

答案 2 :(得分:0)

你的问题是,&#34; 9&#34; (字符串)IS&#34;更大&#34;比&#34; 31&#34;。因为排序是在第一个char上进行的,然后是第二个,依此类推。

    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

使用&#34; TryParse&#34;您可以测试String是否可以转换为Integer(或Double,Single,无论是什么实现TryParse方法),如果可以转换,则该值存储在第二个参数中。

答案 3 :(得分:0)

你应该使用Strict“以避免编码问题 - 基本上你是在相互比较字符串。它们的行为不像整数那样进行比较。

答案 4 :(得分: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。如果第一个条件失败,第二个条件将不会评估。

相关问题