【问题标题】:Regular Expression for Currency货币的正则表达式
【发布时间】:2016-06-02 14:47:59
【问题描述】:

我是正则表达式概念的新手。

我试图在其中制作货币正则表达式

  1. 金额应该是格式化的数字字符串,使用“,”作为千位分隔符,“.”作为小数分隔符。

  2. 金额应精确到小数点后 2 位

  3. 金额应该是一个非零的正值

我试过了

test1= /^\d{1,3}?([,]\d{3}|\d)*?\.\d\d$/;
test1.test(1,100.00);

但它不符合我的要求。建议我如何实现这一点。

【问题讨论】:

标签: javascript regex


【解决方案1】:

如果你想禁止0.00值,并允许没有数字分组符号的数字,你可以使用

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

regex demo

说明

  • ^ - 字符串开头
  • (?!0+\.0+$) - 如果输入为零,则匹配失败的负前瞻
  • \d{1,3} - 1 到 3 位数字
  • (?:,\d{3})* - 0+ 个逗号序列,后跟 3 个数字
  • \. - 文字点
  • \d{2} - 2 位数字(小数部分)
  • $ - 字符串结束。

document.body.innerHTML = /^(?!0+\.0+$)\d{1,3}(?:,\d{3}|\d)*\.\d{2}$/.test("1,150.25");
document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3}|\d)*\.\d{2}$/.test("0.25");

document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3})*\.\d{2}$/.test("25");
document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3})*\.\d{2}$/.test("0.00");
document.body.innerHTML += "<br/>" + /^(?!0+\.0+$)\d{1,3}(?:,\d{3})*\.\d{2}$/.test("1150.25");

【讨论】:

  • 这在 (1150.25) 的情况下为真,在我的情况下应该为假。
  • 如果您将\d 添加到交替中,为什么它应该是错误的?然后,您需要删除该替代方案。我更新了答案。
  • 非常感谢。它真的很好用。我还是正则表达式的新手这对我很有帮助
  • @sg552 见代码sn-p,/^(?!0+\.0+$)\d{1,3}(?:,\d{3}|\d)*\.\d{2}$/
  • @sg552 您需要使用(?:)? 来包装可选模式,请参阅this regex demo
【解决方案2】:

如果你的最小值是1.00

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

这不允许前导零。

【讨论】:

  • 好吧,OP没有提到它,但是如果允许前导零,这也行不通。
  • @WiktorStribiżew:对,我已经添加了关于的通知。
猜你喜欢
  • 2012-11-30
  • 2022-11-26
  • 2010-10-23
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多