我有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来解决这个问题吗?
答案 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
。如果第一个条件失败,第二个条件将不会评估。