コンマの有無にかかわらず小数を許可する正規表現を作成しようとしています。
私は持っている -
^[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 などを受け入れる必要があります。
コンマの有無にかかわらず小数を許可する正規表現を作成しようとしています。
私は持っている -
^[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 などを受け入れる必要があります。
この正規表現は機能しているように見えます (ここで試してみてください) が、少し複雑すぎると同時に,
(つまり 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})?$
10 桁までの適切にフォーマットされた数値を許可する別のオプションを次に示します。
^\d{1,3}((?:\,\d{3})*|\d*)(\.\d{1,10})?$
.123
整数 (小数点の左側) なしで許可したい場合は、最初の値{1,3}
を次のように変更できます。{0,3}
^(?=[\d.])\d{0,3}(?:\d*|(?:,\d{3})*)(?:\.\d+)?$
これにより、一貫したコンマの使用が強制され、左辺がなくなり、空の文字列と一致しなくなり、ユーザーが何らかの数字をフォームに入力したことが保証されます。
変更するには:
{0,3}
に変更{1,3}
+
をに変更し{1,N}
て、最大の精度を設定します。(?=(?:,?\d){0,N})
ここで、N は最大桁数です。(?=(?:,?\d){M})
ここで、M は最小桁数です。楽しみ!
次の正規表現がうまくいきました:
^[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 桁の数字とその後に任意の桁数が続きます。
それが役立つことを願っています。