2011-12-16 13 views
1

定義されていない長さの文字列が数字のみで構成されているかどうかをチェックしたいと思います。例:c#正規表現文字列内の数字のみ

"234324" = true 
"er32" = false 
"1" = true 

私はこの問題を解決しようとした方法は、このようなものです:

public bool Validate(string input) 
{ 
    return (Regex.IsMatch(input, @"^\d+$")) ? true : false; 
} 

今正規表現で大きな英雄ではないイム、私はインターネット上で見つけることができるすべてのものに応じてどちらか表現"^\+$"または"^[0-9]$"働くだろうが、それはここでRegExのための必要はありません:(

+3

入力に改行が含まれていますか?これと '$'がそれにマッチしないことは、コードが私の目にはうまく働かない唯一の理由です。 – fge

+0

偽陽性または偽陰性が出ますか?また、ペットピーボツ、しかし、 '状態? true:false'は 'condition'に相当します – Ray

答えて

9

、あなたはstringが有効な整数であるかどうかを確認するためにint.TryParseを使用することができますdoesntの。

IsMatch既に boolを返すこと
public bool Validate(string input) 
{ 
    int myNumber; 
    return int.TryParse(input, out myNumber); 
} 

注、? true : falseは無用です。

+1

数値がintに収まる場合のみです。 – Ray

+0

これは正規表現ではありません。質問は正規表現です。私は非常に大きな文字列を持っているあなたの答えは真ではありません –

3
int number; 
return int.TryParse(input, out number); 
2

^\d+$は私にとってはうまくいくはずです。最後にあなたの2つの例は、^\+$dが欠落しているので、(私はこれはタイプミスであると仮定し、それは^\d+$する必要があります)2つ目は閉じ角括弧(すなわち^[0-9]+$)の後にプラスを必要と動作しません。

私は入力をトリミングすると、違いがあれば、あなたが問題を引き起こしている空白がある場合がありますを確認します。さもなければあなたのエラーはこのコードのどこか他の場所にあります。

2

文字列が本当に任意の長さのものとすることができるならば、レイは、文字列で表さ番号>がInt32.MaxValueをされた場合に受け入れ答えのコードが失敗すると言うに右です。

次の例では、偽の代わりに、真を返します。ここでは

bool isNumber = Validate(Int64.MaxValue.ToString()); // isNumber == false 

は、任意の長さの文字列のために働く代替ソリューションです:

public bool Validate(string input) 
{ 
    return input.ToCharArray().All(c => Char.IsDigit(c));  
} 
3

使用"^[0-9]$""^[0-9]+$" INSEAD(気づきます+複数の文字が評価されることを意味します。