2012-02-22 8 views
4

私は細かい実行されている米国の価格については、以下の正規表現(区切りカンマ、区切りドット)をテストした:正規表現

​​

それは動作しますが、30,000.000などの価格が拒否されています。 2小数しか受け入れられません。

私はヨーロッパの価格を処理するためにそれらを交換してみました:

^[1-9][0-9]{0,2}(?:.?[0-9]{3}){0,3}(\,[0-9]{2})?$ 

が、それは動作しませんが、30.000,000などの価格が間違っている、受け入れられています。受け入れられるのはわずか2小数です。

この2つの正規表現で何が問題になっていますか?

+0

FJ」答えは正しい。ちょうど、アメリカの最初の正規表現は、このような値を許します: '900000000000.00'は9億ドルです。おそらく正しいですが、面白いと思います。カンマが含まれている場合は、3桁ごとに強制的に使用するか、オプションで次のようにすべての数字を受け入れることができます。 '^ [1-9] [0-9] {0,2}(?:(?:、 0-9] {3}){1,3} | [0-9] {1,9})?(?:[0-9] {2})?$ ' – sln

答えて

5

正規表現では、.は特殊文字なので、リテラルドットと一致させたい場合は、バックスラッシュ(\.)でエスケープする必要があります。カンマの場合はそうではありませんので、変更しないでください。あなたが実際に,と、このような\.を切り替えたいときに、最後にエスケープされていない.\,であなたを左,.を切り替えあなたの試みで

^[1-9][0-9]{0,2}(?:\.?[0-9]{3}){0,3}(,[0-9]{2})?$