1

現在、10 進数の範囲を評価する reg 式が必要です。

要件は以下の通りです

1) ドットの後に小数点以下 1 桁または 2 桁のみを許可することも、整数を許可することもできます (例) 1234 、 123.4 、 1245.78 が有効です

2) 範囲は 9999 以内である必要があります (例) 9999.0 、 9998.99 、 9999.00 - 有効 | 9999.01,10000.00 - 無効

3) 先頭または末尾のゼロを必要としない

これまでのところ、この正規表現を書くまで達成しようとしました

/^[0-9]\d{1,4}(\.\d{1,2})?$/.test(value);

...しかし、9999 桁まで範囲の設定を進めることができません (9999.01 も有効ではないため)助けていただけますか?

4

4 に答える 4

2

正規表現を適用して文字列が有効なdigit with dots浮動小数点数であるかどうかを判断し、それを Number に型キャストして、9999 より大きいかどうかを調べてみませんか。

必要な正規表現は非常に複雑で、クライアントから CPU を大量に消費する可能性があります。

于 2012-09-03T10:07:48.397 に答える
0

これは私が見る限り機能します:

^(9999(?!\.[1-9])(?!\.0[1-9])\.[0-9]{1,2}|9999|(?!9999)[0-9]{1,4}|(?!9999)[0-9]{1,4}\.[0-9]{1,2})$

テストする:

var monstrosity = /^(9999(?!\.[1-9])(?!\.0[1-9])\.[0-9]{1,2}|9999|(?!9999)[0-9]{1,4}|(?!9999)[0-9]{1,4}\.[0-9]{1,2})$/;

console.log(monstrosity.test("9999.00")); // true
console.log(monstrosity.test("9999.01")); // false
console.log(monstrosity.test("9999")); // true
console.log(monstrosity.test("9998.4")); // true
console.log(monstrosity.test("0")); // true
console.log(monstrosity.test("0.5")); // true

このようなものをコードベースに追加すると、将来のメンテナンスプログラマーはピッチフォークであなたを追い詰めるでしょう。webbanditが提案したように、正規表現なしで範囲チェックを解決してみてください。

于 2012-09-03T10:52:51.083 に答える
0

これはあなたのために働くはずの素早く汚いものです:http://regex101.com/r/vK1jM3

/^(?(?=9999)9999(?:\.0+)?|\d{1,4}(?:\.\d{1,2})?)$/gm

私は単に特殊なケースを処理します9999

于 2012-09-03T10:06:43.453 に答える
0

なぜ正規表現?やるだけ

x > 0 && x <= 9999 && (x*100 - Math.floor(x*100) == 0)
于 2012-09-03T11:08:44.827 に答える