2

JavaScript の RegEx を使用して小数点以下の桁数を検証すると、一貫性のない結果が得られます。目標は、数字の任意の組み合わせの後に小数点と 2 つの数字を追加することです。数千の数字(区切り記号なし)を除いて、正常に機能します。

これは私が使用している表現です:

^[0-9]+(\.[0-9][0-9])$

有効な数値:

10.99
0.75
999.99
5000.99
...etc

無効な番号:

1000
.75
0
...etc

問題は、数千の整数に一致することです。これは内部アプリケーション用であるため、追加のセパレーターの使用については心配していません。http://regexpal.com/のようなツールで式をテストしたところ、必要な結果が得られたので、JS に問題の原因があるようです。

ここで問題を再現できます: http://jsfiddle.net/hcAcQ/

4

2 に答える 2

5

の前にバックスラッシュをエスケープする必要があり.ます。

^[0-9]+(\\.[0-9][0-9])$

4 桁 (またはそれ以上) の数字が機能する理由は、単一のバックスラッシュが実際にはそれ.をピリオド文字にエスケープしていないため、ワイルドカードとして機能するためです

3桁以下の場合、正規表現のすべての一致に十分な文字がないため、これは失敗しますが、4桁の場合は機能します(最初の文字クラスに1桁.、 2 つの文字クラス。

おそらく意図したように、をエスケープする\と、.実際にはリテラル文字として解釈されます。.代わりに、変数を正規表現リテラルとして定義することもできます(MDN の例。上部付近)。\これにより、文字列内のエスケープ文字を処理する必要がなくなります。

//instead of new valueFormat = new RegExp('^[0-9]+(\\.[0-9])$');
valueFormat = /^[0-9]+\.[0-9][0-9]$/;
于 2012-11-13T18:43:37.687 に答える
0

これは機能します(.の代わりに\.):

// valueFormat = new RegExp('^([0-9]+)(\.[0-9][0-9])$');    
valueFormat = new RegExp('^([0-9]+)(\\.[0-9][0-9])$');
于 2012-11-13T18:51:43.313 に答える