1

私は有効な数値のみに対してこの式を持っています...

^[0-9,-\.]+$

これで問題なく動作しますが、最大で 1,と 1.を入力できるようにする必要がありますか? ,これはさまざまな文化に対応する必要があるため、との順序は関係ありません.

誰でもこれを手伝ってもらえますか?

4

3 に答える 3

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+)?)$

本当に短いバージョンはないと思います。すべてについて心配する必要はありません?:。サブパターンを非キャプチャにするだけです。とにかくそれは必要ないので、通常はパフォーマンスが大幅に向上します。

于 2012-11-07T11:23:21.270 に答える
0

この正規表現を簡単に使用できます..非常にシンプルで簡単です..

^(\d*|\d*\,\d*|\d*\.\d*|\d*\.\d*\,\d*|\d*\,\d*\.\d*)$
于 2012-11-07T12:01:00.873 に答える
0

これは私がおそらく使用するものです。

/^-?\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桁に制限したい場合。

于 2012-11-07T12:00:38.930 に答える