2011-10-26 10 views
1

ここに正規表現の構文が追加されました。いくつかの入力検証を提供するために正規表現を書こうとしています。制限付き小数点の正規表現

私が必要とするのは、整数をマッチさせるための正規表現か、小数点以下1桁の小数です。ここで

Good Match 
1 
12 
100 
1.1 
100.1 
1.0 

No Match 
1.22 
1. 
0 
012 

は私が思い付いたものですが、それは動作しません:

Regex.IsMatch(paidHours, "\\d+[.]?[0-9]?") 

答えて

2

Regex.IsMatch(paidHours, @"^[1-9][0-9]*(\.[0-9])?$"); 

説明:

^  : Start of the String 
[1-9] : A single number between 1 and 9 
[0-9]* : Zero or more number(s) between 0 and 9 
     ([0-9]? would match zero or one number and the String "100" would not match the regex) 
(  : Start of a group 
\.  : A point 
[0-9] : A single number between 0 and 9 
)?  : End of the group. The group must be repeated zero or one time 
$  : End of the String 

\dが正確に同等[0-9]からではないことに注意してください:\dはどのunicode digitと一致します。たとえば、この文字は、\dを使用すると一致しますが、[0-9]を使用した場合は一致しません。

+2

@Otielあなたは '.'をエスケープする必要はないと確信していますか? – hsz

+2

@Otiel:エスケープする必要があります。それ以外の場合は、!@#$%^&*()なども一致します。 –

+0

あなたが期間を脱し次第、+1してください: –

3

あなたがして試すことができます:OPの質問の編集後に答えを編集

Regex.IsMatch(paidHours, "^\\d+(\\.\\d)?$") 
+2

+1のパターンです。可能な 'a1.11bc'を避けるためにアンカーを追加することをお勧めします。 –

3
Regex.IsMatch(paidHours, @"^\d+(\.\d)?$") 
0

ラインのbeggining /終了を指定してください:

@"^\d+[.]?[0-9]?$" 

あなたは、あなたが文字列の終了を望んで指定しない場合、すなわち1.234は、マッチウィット1.2だったので動作しませんregexで'$'記号で

関連する問題