- ベストアンサー
少数部の判定コードで正しい入力チェック方法は?
- 整数部2桁、小数部1桁まで入力可能なテキストの入力チェック方法について質問です。
- コンパイルエラーの発生の有無や、入力チェックの方法が正しいかについて確認したいです。
- また、間違いや改善点があればアドバイスをいただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
NO1です。 整数部は2桁、小数部は1桁しか許容しないのであれば、もう少し簡略出来ますが如何でしょうか。 Dim a() as string a=Split(Text, ".") 'Textは入力値 If UBound(a) = 1 Then '小数点が入力されたときはa=1となる If len(a(0)) <> 2 Or Len(a(1)) <>1 Then エラー End If ElseIf len(a(0)) <> 2 Then エラー End If
その他の回答 (2)
- nda23
- ベストアンサー率54% (777/1415)
以前も同じような質問されましたよね? 正規表現でチェックした方が楽だと思いますけど・・・ 掲題のプログラムから見ると、「整数2桁」または 「整数2桁.小数1桁」しか許さないみたいですね。 この場合は「(^\d{2}$)|(^\d{2}\.\d{1}$)」です。 コンパイラが無くてもVBSやExcelマクロで調べられます。 正規表現を少し解説します。 (A)|(B)は「AまたはB」と言う意味 ^は文字列先頭、$は文字列終端 \dは数字を表し、{2}は2文字を表す ^\d{2}$→数字で始まる+数字は2桁+数字で終わる ^\d{2}\.\d{1}$→数字で始まる+数字は2桁+ピリオドがある +数字は1桁+数字で終わる そのいずれかのパターンです。 If WScript.Arguments.Count = 0 Then WScript.Echo "文字を入力してください" WScript.Quit End If Dim R, S Set R= CreateObject("VBScript.RegExp") R.Pattern = "(^\d{2}$)|(^\d{2}\.\d{1}$)" S = R.Test(WScript.Arguments(0)) WScript.Echo "結果=" & S 上をテキストファイルhoge.vbsとして格納し、 コマンドプロンプトから cscript hoge.vbs 00.5 とか 打ち込んでみてください。
お礼
ご説明ありがとうございます。 たしかに正規表現を使用したほうが便利だと思いますが、 今回は入力チェックのエラーメッセージを使い分けるので使用しないでおこうと思います。
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 UBoundの引数が不正、Lengthは配列の要素数なのでLenでないといけない。 If(UBound(a) = 1) Then '小数点が入力されたときはa=1となる If(len(a(0)) < 2) Then
お礼
ご回答ありがとうございます。 以下のように修正しましたが、どうでしょうか。 Dim a() as string a=Split(Text, ".") 'Textは入力値 If(UBound(a) = 1) Then '小数点が入力されたときはa=1となる If(len(a(0)) < 2) Then エラー Else If(len(a(1)) < 1) Then エラー End if Else If If(len(a(0)) < 2) Then エラー End If End If
お礼
ありがとうございます。 今回別々のエラーメッセージを表示させるのでまとめないでおこうと思います。