• ベストアンサー

テキストボックスに入力された値の判定

Visual Studio2010初心者です。C#で学習しています。 テキストボックスに入力された値が数字(0~9)かそうじゃないか判定をしたいです。 テキストボックスに文字が入力されたらエラーとして検知したいのですが、どのように処理をすればよろしいでしょうか? ネットで調べるとTryParseメソッドでできるみたいですが、よくわかりません・・・ よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

#2のかたの回答でよいかと思いますが、一点、気になり投稿しました。 それは、「入力された値が数字(0~9)かそうじゃないか判定」の意味が、 例えば以下のような値をOKとするかどうかです。 (1) +12345       ・・・先頭に+の符号付 (2) -12345       ・・・先頭に-の符号付 (3) 12345678901     ・・・11桁の数字 (1)、(2)は、int.TryParseを使用するとOK(数字)となります。 (3)は、int.TryParseを使用するとNG(数字以外)となります。 もし、上記の結果があなたの望んだ結果出れば、特に問題ありません。(以降は読み捨ててください) しかしながら、数字(0~9)かどうかの観点で考えると、(1)(2)はNGであり、(3)はOKとなります。 もし、(1)(2)をNGとし(3)をOKとしたいなら、int.TryParseを使用してはいけません。 そもそも、int.TryParseは、文字列をint型の整数に変換できるか否かのチェックをおこなう機能です。 従って、+12345は、正の12345であり、-12345は負の12345の為、int型の数値に変換可能です。 12345678901は、11桁の数字の為、int型の整数に変換できません。 int型整数が格納できる数値の範囲は、-2147483648~+2147483647です。 従って、11桁の数字は格納できないため、TryParseでエラーとなります。 では、(1)(2)をNGとし(3)をOKとする為には、どうするかというと、 #1のかたのように正規表現を使用します。以下、正規表現を使用したコードです。 ------------------------------------- Regex reg = new Regex(@"^\d+$"); string str = "+12345"; bool ui = reg.IsMatch(str); if (ui == true) { Console.WriteLine("<"+str+">OK"); } else { Console.WriteLine("<"+str+">NG"); } str = "12345678901"; ui = reg.IsMatch(str); if (ui == true) { Console.WriteLine("<"+str+">OK"); } else { Console.WriteLine("<"+str+">NG"); } ------------------------------------- 実行結果 <+12345>NG <12345678901>OK 上記の正規表現は、文字列が数字(0~9)のみで構成され(+,-はNG)、 数字が1文字以上であれば、OKとなります。(何桁であってもOKです)

fflashing
質問者

お礼

+、-のことは全く考えていませんでした。入力文字は8文字に制限しようとおもっていたので、桁オーバーの心配はないのですが、桁オーバーの事は全く意識していませんでした。 お教え頂きました方法は目からうろこです。大変勉強になります。感謝です。ありがとうございます。

その他の回答 (2)

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.2

TryParseに関して補足します。 こちら(↓)にも説明がありますが…… http://msdn.microsoft.com/ja-jp/library/f02979c7%28v=vs.110%29.aspx TryParseの戻り値をチェックすることで、整数判定を行うことができます。 出力用の変数は必要ですが、Try~Catchを使わなくて済むのでコードが見やすくなることがあります。 int result = -1; string input; input = "12345"; if(int.TryParse(input, out result)){   Console.WriteLine("'{0}' is a number", input); }else{   Console.WriteLine("'{0}' is not a number", input); } Console.WriteLine("result = {0}", result); input = "abcde"; if(int.TryParse(input, out result)){   Console.WriteLine("'{0}' is a number", input); }else{   Console.WriteLine("'{0}' is not a number", input); } Console.WriteLine("result = {0}", result); /* * 実行結果: * '12345' is a number * result = 12345 * 'abcde' is not a number * result = 0 */

fflashing
質問者

お礼

お教え頂きましたTryParseでできました!ありがとうございます。コードまでお教え頂き大変助かりました。

  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.1

fflashingさん こんにちは。 私はVB.NETは知っていますが、C#は詳しくは知りません。 しかし基本大差はないので、一応回答させて頂きます。 ※C#の構文を知らないので間違っていたら訂正して下さい。 1.通常、文字のチェックは正規表現で行った方が良いと思います。  例)VB.NET    Dim num As String = "100.9"    If System.Text.RegularExpressions.Regex.IsMatch(num, "^\d+$") Then     MsgBox("数字です。")    Else     MsgBox("数字以外が入っています。")    End If  例)C#    string number = "123456";    if (System.Text.RegularExpressions.Regex.IsMatch(num , @"^\d+$"))    {   Console.WriteLine("数字です。");    }    else    {     Console.Write("1/{0} = {1}", x, x_inv);  } 2.TryParseで行う?   試しましたが数字チェックは無理なようです。   数字エラーの場合結果をいつも0になるだけのようです。   ※VB.NETで試した結果ですが… 3.Parse命令でTry&Catchで行う  例)VB.NET    Dim num As String = "100.9"    Dim i As Integer    Try     i = Int32.Parse(num)     MsgBox("数字です。")    Catch     MsgBox("数字以外が入っています。")    End Try  例)C#     string num = "this is not a number";     int i;     try {      i = Int32.Parse(num);  Console.WriteLine("数字です。");   } catch {  Console.WriteLine("数字以外が入っています。");  }

fflashing
質問者

お礼

正規表現でのチェック。思いつきませんでした。テキストエディタで正規表現はよく使うのですが、.NETプログラムで使ったことがありませんでした。勉強になります。正規表現が使えれば文字のチェックも柔軟にできるので今後私の助けになってくれると思います。ありがとうございます!

関連するQ&A

専門家に質問してみよう