2011-08-04 13 views
0

.NETの10進数型の数値を検証するために使用している正規表現があります。私の正規表現は0.5で動作しますが、.5(先行ゼロなし)では動作しません。私はこの正規表現を作った人ではなく、私はそれらをよく知らないので、私はここで尋ねると思った。数値正規表現ヘルプ

ありがとうございます。

現在の正規表現

[-+]?[0-9]*\.?[0-9]+ 

(EDIT - これは、この正規表現によるものでしたか?[ - +] [0-9] * [0-9]私は+最後に欠けていました。? ) この番号で検証が失敗します 450.000000000000

この番号で検証は失敗します。 .450

私が扱っているSQLデータベースの数値は数値(28,12)と定義されています。そのため、ビジネスロジックでは0〜9,999.99の値が適用されますが。

したがって、私の検証を使用して入れたデータは、定義されたビジネスルールでは機能しますが、別のシステムによって供給されているため、データベースに既に存在するデータを考慮する必要があります。

編集:私の元の正規表現は機能しますが、必要な容量ではありません。私は現在、私のユーザーは、この上無効な番号のメッセージを取得

.5 

を検証するために、この番号が必要です。彼らは、私は、その10進数で始まり入力した番号に0を付加するためにいくつかのJavaScriptを追加することができたと

0.5 

を入力することで、これを回避することができますが、私にはそれがハッキングされ、私はむしろしたいですそうしないでください。

+0

元の正規表現は.5でも完全に動作するようです。それを戻すことはできません。 –

+0

この正規表現テストサイトhttp://regexhero.net/tester/に基づいて、私の正規表現には何も問題はありません。むしろ、Microsoftの正規表現属性データアノテーションに問題があるようです。私はこの質問をMVC3検証の下で再掲載するつもりです。みんな、ありがとう。 –

答えて

2

正規表現は正常に動作するはずです。最初の二つの部分が欠けている「0.5" の場合

[-+]? # matches '-' or '+', optional 
[0-9]* # matches zero or more digits, as many as possible 
\.?  # matches a '.', optional 
[0-9]+ # matches one or more digits, as many as possible 

、それは試合を失敗しないだろう。ここでは、正規表現の各部分の散歩です。なぜあなたはトラブルを抱えているのか分かりませんが、.NETコードを使用している可能性があります。投稿してください。

最初の文字クラス([\-+])で " - "をエスケープしてもかまいませんが、最初の文字は " - "ですが、文字クラスに " - "通常は範囲を指定します。

+0

私は[ - +]は必要ありませんので、式 –

+0

から削除します[ - +]を削除しようとしましたが、それは好きではありませんでした。私は[ - +]を削除しましたか?それはどちらも好きではありません。ここで私が今使っている表現と、私が得ている例外があります。 "[0-9]?* \。[0-9]?[0-9] +" - ネストされた量限定子*。 –

+0

これはうまくいくはずです。 –

1
[-+]?[0-9]*\.?[0-9]+ 

"。"の問題をエスケープします。

+0

彼の "。"エスケープされましたが、書式設定のために表示されませんでした。 –

+0

は最初に投稿された正規表現ではありませんか? – phimuemue

+0

@phimuemue - 質問を編集する前に彼が投稿していましたが、最初に投稿された正規表現は、バックスラッシュが見えないようにコードとしてフォーマットされていませんでした。 –

1

http://www.regular-expressions.info/floatingpoint.html

[-+]?[0-9]*\.?[0-9]* 

実際pyroscopeではなく、*

+1

これは空の文字列と一致することもありますが、それは意図していない可能性があります。 – Lucero

+0

間違いなく、私の問題が解決しました。私は私の妥当性検証の最後に+が欠けていた。私は複数のプロパティを検証しています(MVC3 Data Annotations RegularExpressionバリデータを使用)。とにかく、私のインスタンスの一つで、私は+を中止しました。これで、最後のすべての0、または '。'の問題が修正されました。ゼロなしで先導する? –

+0

あなたが提供したリンクは、私が使用している元の正規表現を取得した場所です。しかし、私は+/-オプションは必要ありません。私は10進数で数字を始めるオプションが必要です。おそらく私は元の質問を変更する必要があります。 –

1

の終わりに右+でそれを得た正規表現は、しかし、その後の処理(DBまたは何でも)、罰金であるように思わ受け付けない場合がありますこの形式。

1

数字を表すのに\dを使用してください。これは、先行する数字のない小数を考慮に入れます。

^[-+]?(?:\d+(?:\.\d+)?|\.\d+)$ 

はまた、非キャプチャグループ(?:regex)は、エンジンが少ないキャプチャ作業を行う必要がありますので、それはパフォーマンスが向上します。

+0

私はこれを試して、数字で失敗しました.5 –

+0

@Jeff、あなたの '.5'にスペースがありますか? –

+0

@ジェフ、それは私のために正常に動作します。あなたの正規表現の '\'をあなたの言語に合わせて適切にエスケープしていますか? –