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 までの数字を入力すると、プログラムは 1 文字入力後の空白を 0 と見なすことが後でわかったので、警告メッセージが表示されます。したがって、4 を入力すると、プログラムはそれを 40 として読み取ります。

String 入力を Int に変換することでこの問題を解決できますか?

4

5 に答える 5

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」よりも「大きい」ということです。ソートは最初の文字で行われ、次に2番目の文字で行われるためです。

    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メソッドを実装するものなら何でもDouble、Single)に変換できるかどうかをテストでき、変換できる場合は、値が2番目のパラメーターに格納されます。

于 2012-11-16T08:57:53.037 に答える
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です。2番目の条件は、最初の条件が失敗したかどうかを評価しません。

于 2012-11-16T10:28:04.880 に答える
0

コーディングの問題を回避するには、Strict on" を使用する必要があります。基本的に、文字列を相互に比較しています。

于 2012-11-16T09:32:31.073 に答える