JavaScriptを使用して、桁区切り記号または小数点を含む可能性がある数値を検証するための正規表現が必要です。最大値は9,999,999.99
最小値0.01
その他の有効な値:11,111
11.1
1,111.11
無効な値:1111
1111,11
,111
111,
私は喜びで全探索しました。
/^\d{1,3}(,\d{3})*(\.\d+)?$/
最小値と最大値について...まあ、私は正規表現ではそれをしませんが、最初に先読みを追加できます:
/^(?!0+\.00)(?=.{1,9}(\.|$))\d{1,3}(,\d{3})*(\.\d+)?$/
注:これにより0,999.00
なので、次のように変更できます。
/^(?!0+\.00)(?=.{1,9}(\.|$))(?!0(?!\.))\d{1,3}(,\d{3})*(\.\d+)?$/
先頭の0は許可されません。
編集:
テスト: http://jsfiddle.net/pKsYq/2/
((\d){1,3})+([,][\d]{3})*([.](\d)*)?
いくつかはうまくいきましたが、私はまだ正規表現も学んでいます。
ロジックは、1〜3桁が0〜1回、1つのコンマの後に3桁が何回でも続き、1つである必要があります。 0から1回、任意の桁数が続く
以下の制限のために以下の正規表現を使用しました-
^(?!0|\.00)[0-9]+(,\d{3})*(.[0-9]{0,2})$
Tezraの式は「1」で失敗します。または「1.0」。私の目的のために、次のように、先頭と末尾のゼロ、および先頭の+または-記号を許可します。
^[-+]?((\d{1,3}(,\d{3})*)|(\d*))(\.|\.\d*)?$
まず、データの取得元のフォームを所有している場合、入力を制限する最善の方法は、適切なフォーム要素(別名、数値フィールド)を使用することです。
<input type="number" name="size" min="0.01" max="9,999,999.99" step="0.01">
「、」を入力できるかどうかはブラウザによって異なりますが、ブラウザは常に実際の数値として値を提供します。 (すべてのフォームデータはサーバー側でも検証/サニタイズする必要があることに注意してください。クライアントを信頼しないでください)
第二に、私は他の答えをより堅牢な(プラットフォームに依存しない)/変更可能な正規表現に拡張したいと思います。
^<my_regex>$
(<regex>)?
に入れることができます。\.\d+
です。[1-9]
を「0以外の数」に使用できます。そのため、\.\d+[1-9]
([1-9]<rest-of-number-regex>|0)
[1-9]\d{0,2}
(,\d{3})*
(,?\d{3})*
すべてを一緒に入れて
^([1-9]\d{0,2}(,?\d{3})*|0)(\.\d+[1-9])?$
最近のプロジェクトでは、国際的な要件を満たすために、このバージョンを変更する必要がありました。これは私たちが使用したものです:^-?(\d{1,3}(?<tt>\.|\,| ))((\d{3}\k<tt>)*(\d{3}(?!\k<tt>)[\.|\,]))?\d*$
名前付きグループの作成(?<tt>\.|\,| )
否定的な先読みを使用できるようにしました(?!\k<tt>)[\.|\,])
後で千単位のセパレータと小数点が実際に異なることを確認します。