2012-04-15 20 views
4

私は意味:文字列が正の整数であるかどうかを確認する方法はありますか?

1231 YES 
121.1241 NO 
121,1241 NO 
-121 NO 
124a NO 

私はC#でより速く、それをどのように行うことができますか?

+2

正の整数? ( 'int.MaxValue'または' int.LongValue'より大きい値の場合はどうすればよいでしょうか?)先頭のスペースは有効ですか?先頭の+記号はどうですか? –

+1

ああ、何を約0?あなたは本当に*肯定*、または非否定を意味しましたか? –

+0

'1.0'についてはどうですか? –

答えて

16
int x; 
if (int.TryParse(str, out x) && x > 0) 
+1

なぜ 'uint.TryParse(str、out x)'ではないのですか?私はそれがより効率的であると想像することができます。なぜなら、 '-'を確認する必要がないからです。 – Firo

+0

私はコードを書くのではなく、もう少し説明が必要だと思います。 –

5

を解析し、実際の代わりに、文字列が空でないと、あなたがそれを許可する場合のみ有力+記号で、必要に応じて、数字が含まれているかどうかを確認することです。

これは範囲チェックを実行しないため、intまたはlongに収まらない場合でも、9999999999999999999999999999999999が有効であることに注意してください。

あなたはそのために正規表現を使用するか、またはおそらくLINQできます

var nonNegative = text.Length > 0 && text.All(c => c >= '0' && c <= '9'); 

(これはGuffaのChar.IsDigitアプローチに似ていますが、ASCII数字に自分自身を制限し、多くの非ASCII数字がUnicodeにあります。)だけではなく、値 - これは非負の値に制限しますことを

注意。どのように "0"と "0000"を扱いますか?

8

それは数字のみが含まれているかどうかをチェックすることができますどのような範囲で

if (theString.All(Char.IsDigit)) 
関連する問題