0

コンマの有無にかかわらず小数を許可する正規表現を作成しようとしています。

私は持っている -

^[0-9]*((,\d{3})?(,\d{3})?(,\d{3})?)*(\.[0-9]{1,10})?$ 

これは正規表現テスターで動作するようですが、コードに入れると動作しません。1,000.00 で失敗したが、1,000 ではない場合

1, 1000, 1000.00, 1,000,000.123, 1223.456, 1,000,123.928 などを受け入れる必要があります。

4

4 に答える 4

5

この正規表現は機能しているように見えます (ここで試してみてください) が、少し複雑すぎると同時に,(つまり 12345,789,000.123) の使用に一貫性がありません。これはその問題を解決するはずです:

^\d{1,3}(?:(,?)\d{3}(?:\1\d{3})*)?(?:\.\d{1,10})?$

後方参照 ( \1) を使用することで、,が常に使用されるか、まったく使用されないかを確認できます。

オプションの前で数字を作成し.、 a の前で数字を必要とすること,も可能ですが、少し複雑です。

^(?:\d{1,3}(?:(,?)\d{3})?)?(?:\1\d{3})*(\.\d{1,10})?$
于 2012-10-25T15:09:34.980 に答える
3

10 桁までの適切にフォーマットされた数値を許可する別のオプションを次に示します。

^\d{1,3}((?:\,\d{3})*|\d*)(\.\d{1,10})?$

.123整数 (小数点の左側) なしで許可したい場合は、最初の値{1,3}を次のように変更できます。{0,3}

于 2012-10-25T15:13:16.037 に答える
1
^(?=[\d.])\d{0,3}(?:\d*|(?:,\d{3})*)(?:\.\d+)?$

これにより、一貫したコンマの使用が強制され、左辺がなくなり、空の文字列と一致しなくなり、ユーザーが何らかの数字をフォームに入力したことが保証されます。

変更するには:

  • 空の文字列を許可するために先頭の先読みを削除します
  • LHS を要求するよう{0,3}に変更{1,3}
  • final+をに変更し{1,N}て、最大の精度を設定します。
  • 最大値を設定するには、最初の先読みを次のように変更 (または、空の文字列と一致しないように追加) します。
  • (?=(?:,?\d){0,N})ここで、N は最大桁数です。
  • 最小値を設定するには、最初の先読みを次のように変更します。
  • (?=(?:,?\d){M})ここで、M は最小桁数です。
  • これらを組み合わせて最小/最大にします。

楽しみ!

于 2012-10-26T00:04:27.997 に答える
0

次の正規表現がうまくいきました:

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

W3Schools Web ページのこのページを使用してテストしたもの: http://www.w3schools.com/js/tryit.asp?filename=tryjs_regexp_test。最大 3 桁の数字の後にコンマと 3 桁の任意のシーケンスが続き、オプションのドットで終わり、少なくとも 1 桁の数字とその後に任意の桁数が続きます。

それが役立つことを願っています。

于 2013-01-23T13:41:19.050 に答える