我想在replace()
中使用正则表达式来格式化货币输入,小数点前有可选的数字长度,小数点后只有一位或两位数字。
基本上,它应该匹配这样的9999999,00
或这个9999999.00
而不是这个9999999,000
。
我有以下正则表达式:
value.replace(/[^d*((.|,)d(d)?)?$]/, "")
但它不起作用,因为它允许以任何顺序而不是给定格式.
或,
数字。
我可以将此字符串^d*((.|,)d(d)?)?$
放在方括号内[^]
以匹配格式之外的任何字符吗?或者也许有另一种方法可以解决它?
编辑:我将react-final-form
parse
功能一起使用它,仅允许给定格式的输入并删除所有其他字符。这是我的代码和多克斯 https://codesandbox.io/s/react-final-form-simple-example-o9jub?fontsize=14
检查此模式:
^([1-9]d*|0?)([,.]d{2})?$
演示一些示例:这里
你的表达式中有几个错误:
- 我不确定您为什么在表达式中添加方括号
[^...]
- 方括号内的字符是单独处理的,而不是作为一个整体表达式处理的。 - 请注意,常规方括号
(...)
会将表达式的输出集中在方括号内的匹配字符串。
试试这个表达式:d+[.,]d{1,2}
d+
验证小数点前至少有 1 位数字。[.,]
只是匹配不同字符的更好方法。d{1,2}
小数点上方的 1 位或 2 位数字。