我是正则表达式概念的新手。
我试图在其中制作货币正则表达式
金额应为格式化的数字字符串,使用“,”作为千位分隔符,使用“.”作为小数点分隔符。
金额应精确到小数点后两位
金额应该是一个非零的正值
我试过了
test1= /^\d{1,3}?([,]\d{3}|\d)*?\.\d\d$/;
test1.test(1,100.00);
但它没有满足我的要求。建议我如何实现这一目标。
最佳答案
如果你想禁止 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");
关于javascript - 货币的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595165/