2008/12/10(Wed) 23:34:16 編集(投稿者)
No29536 の正規表現で一か所間違いを見つけましたorz
整数部0の小数のチェック部分で、小数部2桁のパターンだけに対応する形になっていたため、
例えば0.1でマッチしないになってました。
> string s =
> @"^(-?(1000(\.0{1,2})?|[1-9][0-9]{0,2}(\.[0-9]{1,2})?|0\.([1-9][0-9]|[0-9][1-9]))|0(\.0{1,2})?)$";
@"^(-?(1000(\.0{1,2})?|[1-9][0-9]{0,2}(\.[0-9]{1,2})?|0\.([1-9][0-9]?|[0-9][1-9]))|0(\.0{1,2})?)$";
~
のように修正(~の箇所の「?」を追加)すれば、この間違いについては大丈夫だと思います。
こういう凡ミスをしていても、このくらいの複雑さになるだけで簡単に見落としてしまうので、
単純な正規表現で済まないような条件では正規表現の使用は個人的に避けますね。
@"^-?[0-9]{1,4}(\.[0-9]{1,2})?$";
というような正規表現で、
-9999.99〜9999.99の範囲の数値表現(ただし-0や002のようなパターンは許容される)である
ことだけをチェックする部分に正規表現を用いるのがよいかなと思います。