【问题标题】:Allowing money amounts to be entered into an input with a JavaScript Regex允许使用 JavaScript 正则表达式将金额输入到输入中
【发布时间】:2012-03-14 00:28:06
【问题描述】:

我正在使用普通的 JavaScript,需要一些关于我的正则表达式的帮助。必须允许使用以下格式的货币,并且只能使用这些格式(对于允许的美元金额,0 的数量(十、百、千等)没有限制):

  • 25,000 美元
  • $25000
  • 25,000
  • 25000
  • 25000.01
  • 25,000.99
  • 2000.99
  • 50.00
  • 50
  • 1.95
  • 1 .99
  • 0.25
  • 0.25 美元
  • 0.2
  • 2.3
  • 2000.5
  • .75

var 正则表达式 = /^\$?.?[1-9][0-9,]*(.[0-9]{0,2})?$/;

目前,它不允许输入像 0.99 这样的金额。

【问题讨论】:

  • 所以...您只想允许数字和单个句点?句点后最多两个数字,还是总是句点后两个数字?
  • 这里是一个测试正则表达式的好网站:fileformat.info/tool/regex.htm
  • @DavidThomas - $ 和逗号应该是可选的。最大值没有限制,基本上只允许有人会想到从一美分或更高的0.01、0.01、0.99、2、2.00等输入的任何格式。
  • @northpole 这是一个很棒的网站! Zoolander,似乎正则表达式是正确的,希望你必须逃避更多的东西(你可以在那个正则表达式网站上看到究竟是什么

标签: javascript regex decimal currency


【解决方案1】:

试试这个

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

here on Regexr

唯一不匹配的是你的最后一个例子,它在点之前有一个空格。这有效吗?

编辑:

我的第一个解决方案有一个限制,即它接受以 0 开头的数字,例如 001。此解决方案使用负前瞻来避免这种情况:

^\$?(?!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

【讨论】:

    【解决方案2】:
    ^\$?(?:[1-9]\d?\d?(?:(?:,\d{3})*|(?:\d{3})*)|0)(?:\.\d\d?)?$
    

    尽管我不会使用如此严格的输入限制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多