2012-02-23 9 views
1

私はプレーンなバニラJavaScriptを使用しており、正規表現については何か助けが必要です。次の形式でお金を許可する必要があり、これらのフォーマットでのみ(許可金額のための0(数十、数百、数千、など)の数に制限はありません):JavaScript Regexで入力に金額を入力できるようにする

  • $、25,000
  • $ 25000
  • 25,000
  • 25000.01
  • 25,000.99
  • 2000.99
  • 50.00
  • 1.95
  • 1 0.99
  • 0.25
  • $ 0.25
  • 0.2
  • 2.3
  • 2000.5
  • 0.75

var regex =/^¥$?.?[1-9][0-9,]*(.[0-9]{0,2})?$/;

現在、0.99のような金額は入力できません。

+2

だから...数字と1つのピリオドだけを許可したいですか?期間に続く2つの数字の*最大*、または期間の後の*常に* 2つの数字? –

+1

ここに正規表現をテストするための素晴らしいサイトです:http://www.fileformat.info/tool/regex。htm – northpole

+0

@DavidThomas - $とカンマはオプションです。最大値に制限はありません。基本的に誰かが1ペニー以上0.01ドル、0.99ドル、2ドル、2.00ドルなどの値段で入力すると考えられる形式で許可する必要があります。 – Zoolander

答えて

2

この

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

を試してみてください一致していないされて唯一のことは、あなたの第三の最後の一例であるhere on Regexr

それを参照してください、それがドットの前にスペースがあります。それは有効ですか?

編集:

私の延期ソリューションは、このソリューションでは、この問題を回避するために、負の先読みを使用して001のように、それは0から始まる番号を受け入れるという制限があります:

^\$?(?!0\d)(?:\d+|\d{1,3}(?:,\d{1,3})*)(?:\.\d{2})?$ 

はそれを参照してください。先読み

なし here on Regexr

ソリューション

^\$?(?:0|[1-9]\d*|[1-9]\d{0,2}(?:,\d{1,3})*)(?:\.\d{2})?$ 

は、私は、このような厳格な入力制限を使用することはありませんRegexr

0
^\$?(?:[1-9]\d?\d?(?:(?:,\d{3})*|(?:\d{3})*)|0)(?:\.\d\d?)?$ 

Althoでそれを参照してください。

関連する問題