

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です)
+、-のことは全く考えていませんでした。入力文字は8文字に制限しようとおもっていたので、桁オーバーの心配はないのですが、桁オーバーの事は全く意識していませんでした。
お教え頂きました方法は目からうろこです。大変勉強になります。感謝です。ありがとうございます。
No.2
- 回答日時:
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
*/
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("数字以外が入っています。");
}
正規表現でのチェック。思いつきませんでした。テキストエディタで正規表現はよく使うのですが、.NETプログラムで使ったことがありませんでした。勉強になります。正規表現が使えれば文字のチェックも柔軟にできるので今後私の助けになってくれると思います。ありがとうございます!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) visual basic初心者です。 visual studioで電卓を作成しています。 実行時にテ 1 2023/02/08 00:18
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Visual Basic(VBA) テキストボックスの値を該当セルに登録する方法 2 2022/11/23 18:47
- Access(アクセス) Access の SetFocus について教えてください 5 2022/08/04 07:32
- JavaScript HTMLでJavaScriptを使用してプログラムを作ります。 入力されたパスワードを取得して、パス 2 2022/10/18 01:05
- Visual Basic(VBA) WordのVBAについて 5 2023/01/11 14:38
- Java Javaについて質問です。 勉強し始めたばかりの初心者です。 相続税について課税額を算出するコードを 1 2022/05/31 19:02
- その他(Microsoft Office) エクセルのマクロを教えてください。 1 2023/01/27 09:05
このQ&Aを見た人はこんなQ&Aも見ています
-
visualstudio C# テキストボックスの数値を取得して計算する方法を教えてください。
Microsoft ASP
-
C#テキストボックスの文字を配列にいれてその後表示する
C言語・C++・C#
-
C#のループでtextboxに値を入れる方法
C言語・C++・C#
-
-
4
テキストボックスに記述した数値を加算させたい
Visual Basic(VBA)
-
5
別のフォームで記述している関数を実行するには?C#
C言語・C++・C#
-
6
c#でTextBoxの入力制限
C言語・C++・C#
-
7
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
8
VC#でテキストボックスに変数の値を表示する方法
その他(プログラミング・Web制作)
-
9
数字以外の入力をエラーにするには?
Visual Basic(VBA)
-
10
Labelコントロールに数字を代入する
C言語・C++・C#
-
11
データベースのデータをTextBoxに入力された値で検索しDataGridViewに表示する方法
Visual Basic(VBA)
-
12
C#で動的配列Listの中身をListBoxに表示するには
C言語・C++・C#
-
13
C# ListBoxのアイテムをユーザーが直接リネームできるようにすることは可能ですか?
C言語・C++・C#
-
14
DataGridViewに空白がある場合はエラーにしたい
Visual Basic(VBA)
-
15
ラジオボタンの初期指定
Visual Basic(VBA)
-
16
TextBoxでEnterキーを押すと、にあるButtonを押したのと同じ効果を出す方法
Visual Basic(VBA)
-
17
C#です。リストボックスの項目をダブルクリックすると、別のフォーム出現するには
その他(プログラミング・Web制作)
-
18
矢印(左右)キーでイベントを発生させたい。
Visual Basic(VBA)
-
19
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
20
開始と終了を指定して、その間の日付を取得したい。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Randomメソッドの確率設定
-
ループ処理の際、最後だけ","を...
-
7つ数字を表示したら改行すると...
-
java キーボード入力された値の...
-
数値⇒漢数字変換 java
-
JAVAのfor文で困っています。
-
javaです。 途中まで出来ている...
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
論理演算子”||”またはの入力方法
-
画面出力の際の繰り返しと入力...
-
javaプログラムについて
-
2つのスクロールバーを連動させ...
-
Java、2の0乗~10乗の表示
-
複数の数字を計算
-
テキストボックスに入力された...
-
countに実行した回数をいれたい...
-
javaプログラミングでの文字化...
-
Javaでゲームを作ったのですが...
-
コマンドライン引数の例外処理...
-
Javaの問題について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
論理演算子”||”またはの入力方法
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
java キーボード入力された値の...
-
Randomメソッドの確率設定
-
テキストボックスに入力された...
-
countに実行した回数をいれたい...
-
総称型ArrayList<E>への参照...
-
javaプログラムについて
-
JAVAのfor文で困っています。
-
繰り返しによる星印の出力
-
Java 配列<選挙>
-
javaです。 途中まで出来ている...
-
数値⇒漢数字変換 java
-
Ctrl+Zが入力されると終了する...
-
java 入力 3 4 3 出力 ABC DEFG...
-
エラー(互換性の無い型)
-
Java 入力した整数値の合計を、...
-
【JAVA <identifier>がありま...
-
2つのスクロールバーを連動させ...
おすすめ情報