2

だから、私はこれを持っていますifステートメント:
if (String(val).search(/^((\d+(((\,\d{3,})+)?)(\.\d+)?)|(\.\d+))$/) !== -1)

これは、(私が知る限り)次
のように述べています。文字列は、少なくとも1桁で始まるか、 。である必要があり.ます。
文字列が数字で始まる場合、コンマの後に少なくとも3桁が続く限り、オプションで文字列にコンマを含めることができます。文字列にが含ま.れている場合は、その後に少なくとも1桁の数字を続ける必要があります。
一つだけ存在することができます.

したがって、次のような文字列:

5
5.00
5000
5,000
5000.00
5,000.00

すべてtrueを返します

ただし、0-9 , .または不正な形式以外のものを含む文字列はfalseを返します。したがって、次のような文字列:

5,00
5,00.00
5.00.00
a5

さて、上記は機能しますが、それを単純化する方法はありますか?

4

2 に答える 2

3

冗長な括弧をいくつか削除できます。

^(\d+((\,\d{3,})+)?(\.\d+)?|\.\d+)$

そして、のようなものは次のよう(( ... )+)?に置き換えることができます:( ... )*、したがって、最終的な正規表現は次のようになります。

^(\d+(\,\d{3,})*(\.\d+)?|\.\d+)$

そして、次のような入力を拒否したい場合:

50000,000,000.0

そして、以下を許可するだけです:

5,000,000.0
50,000,000.0
500,000,000.0

次に、次のようなことを行います。

^(\d{1,3}(\,\d{3})*(\.\d+)?|\.\d+)$
于 2012-11-09T11:07:26.620 に答える
0

いくつかのパレンを取り除く以外に、それを単純化することはできないと思います。それは、おそらく十分に複雑ではありません。このパターンでは、次のような不正な形式の文字列も許可されます

50000,000,000.000000000
于 2012-11-09T11:09:08.833 に答える