高校三年生の合唱祭で何を歌いましたか?

Visual Studio2010初心者です。C#で学習しています。

テキストボックスに入力された値が数字(0~9)かそうじゃないか判定をしたいです。

テキストボックスに文字が入力されたらエラーとして検知したいのですが、どのように処理をすればよろしいでしょうか?

ネットで調べるとTryParseメソッドでできるみたいですが、よくわかりません・・・

よろしくお願いします。

A 回答 (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です)
    • good
    • 0
この回答へのお礼

+、-のことは全く考えていませんでした。入力文字は8文字に制限しようとおもっていたので、桁オーバーの心配はないのですが、桁オーバーの事は全く意識していませんでした。

お教え頂きました方法は目からうろこです。大変勉強になります。感謝です。ありがとうございます。

お礼日時:2013/12/26 16:56

TryParseに関して補足します。


こちら(↓)にも説明がありますが……
http://msdn.microsoft.com/ja-jp/library/f02979c7 …

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
*/
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/12/25 09:59

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("数字以外が入っています。");
 }
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/12/25 10:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A