2012-01-04 4 views
1

TextBoxは数字のみを受け入れる必要があります(力率はEのintまたはfloat)。Regexには、数値の文字にプラス記号、ドット、Eのみを使用できます

だから、いくつかの有効な例は以下のとおりです。

1 
+1.1 
0 
.1 
1E-1 
1e-2 
-1.66 
-6e-10 

は非有効例:

E-1 

一般的に、それは数または+のいずれかで始まる必要があります - 看板やDOT。

これをTextChangedに入れても問題ありません。

textBox.Text = Regex.Replace(textBox.Text, @"[\d]", ""); //so useless! 
+0

おそらく代わりに正規表現で、あなたはdecimal.TryParse() – rejj

答えて

3

あなたの指数を使用したい場合は、(using System.Globalization;を追加してください)、これを試してみてください。

decimal value; 
if(Decimal.TryParse(textBox.Text, NumberStyles.Float, CultureInfo.CurrentCulture, out value)) 
{ 
    textBox.Text = value.ToString(); 
} 
+1

あなた自身のtry/catchブロックの代わりに '.TryParse()'を使うときれいです。 – rejj

+0

ああ、 'NumberStyles'を取った' TryParse'のオーバーロードは見えませんでしたが、私はそれを見つけました今、適切に私の答えを更新します:) – Lukazoid

+0

ありがとう、しかし私は "E"を入力しても動作しません:( –

1

なぜRegexを使用するのですか?

float f; 
bool isNumber = Single.TryParse(textbox.Text, out f); 
+1

を使用することができ、私はこれに同意しますそのような種類の正規表現を構成することはできますが、この順序でのみ...また、.. "は本当に速く複雑になるでしょう。 –

+0

-1実際には正しくありません。正確なオーバーロードは、IFormatProviderを提供するオーバーロードです。さらに重要なのは、NumberStyles(この場合はNumberStyles.Float) – rejj

+0

私の心は正しい場所にありました;)ルカゾイドはもう一つの答えでそれを得た。彼のために+1。 – Rotem

関連する問題