私は有効な数値のみに対してこの式を持っています...
^[0-9,-\.]+$
これで問題なく動作しますが、最大で 1,
と 1.
を入力できるようにする必要がありますか? ,
これはさまざまな文化に対応する必要があるため、との順序は関係ありません.
。
誰でもこれを手伝ってもらえますか?
正規表現フレーバーが先読みをサポートしている場合は、次を使用できます。
^(?=[^,],[^,]$)(?=[^.]\.[^.]$)[\d,.-]+$
そうでない場合は、次のようなことができます。
^(?:[\d-]*,?[\d-]*\.?[\d-]*|[\d-]*\.[\d-]*,[\d-]*)$
しかし、これはかなり醜いと思います。
キャラクタークラスを変更したことに注意してください。[0-9]
に短縮できます\d
(正規表現のフレーバーによっては、これは単に 以外の Unicode 数字と一致する可能性があることに注意してください0-9
)。.
文字クラス内でエスケープする必要はなく、文字クラス-
の先頭または末尾に属します。それ以外の場合は、エスケープする必要があります。 . おかしなことに、あなたの場合は違いさえありません。なぜなら、からから,-.
までの文字の範囲,
を.
(ASCII順で)作成するからです。ただし、この範囲のすべての文字は、ちなみに,
,-
と.
. あなたはラッキーです ;)
ただし、どちらの答えも、実際には、明示的に求めていることを実行するだけです。あなたのパターンはまだ一致--.--34,---1--2
し、そのようなものです。有効な数値をカルチャに依存しない小数点と一致させたい場合は、おそらく代わりにこれを使用する必要があります。
^-?\d*([.,]\d+)?$
.
有効な数値を小数点と最大,
1,000 区切り記号 (またはその逆)に一致させたい場合は、次のようにします。
^-?\d{0,3}(?:(?:,\d{3})?(?:\.\d+)?|(?:\.\d{3})?(?:\,\d+)?)$
本当に短いバージョンはないと思います。すべてについて心配する必要はありません?:
。サブパターンを非キャプチャにするだけです。とにかくそれは必要ないので、通常はパフォーマンスが大幅に向上します。
この正規表現を簡単に使用できます..非常にシンプルで簡単です..
^(\d*|\d*\,\d*|\d*\.\d*|\d*\.\d*\,\d*|\d*\,\d*\.\d*)$
これは私がおそらく使用するものです。
/^-?\d{0,2}((\.?\d{3})*(,\d+)?|(,?\d{3})*(\.\d+)?)$/
/*
^ beginning of string
-? 0 or 1 minus sign
\d{0,2} 0-2 numbers
(
(\.?\d{3})* 0 or more (3-digit numbers, alternatively preceded by a dot)
(,\d+)? 0 or 1 (comma and at least 1 number)
| or
(,?\d{3})* 0 or more (3-digit numbers, alternatively preceded by a comma)
(\.\d+)? 0 or 1 (dot and at least 1 number)
)
$ end of string
*/
編集:これを次のように変更できます
/^-?\d{0,2}((\.?\d{3})*(,\d{1,2})?|(,?\d{3})*(\.\d{1,2})?)$/
^^^ ^^^
浮動部分を2桁に制限したい場合。