否定用于货币文本字段的正则表达式

Negating Regular Expression used for a currency text field

我有一个用作货币输入的数字文本字段。我只想接受数字和 2 位小数,用点 (".") 分隔。

用户将键入一个金额,然后将动态计算并显示佣金,而无需提交表单。

我提出的建议解决方案是按以下方式使用此 RegEx:

/^[0-9]+\.?([0-9]{1,2})?$/g

$input.val($input.val().replace(/^[0-9]+\.?([0-9]{1,2})?$/g,''));

我提出的解决方案的问题是我使用的 RegEx 准确地过滤了我想要允许的字符,因此表达式应该被否定。

例如:$input.val($input.val().replace(!(/^[0-9]+\.?([0-9]{1,2})?$/g),''));

我试过使用负前瞻,但没成功。

我有一个可能有助于测试的 jsFiddle:https://jsfiddle.net/budxn9ey/

请注意,我需要否定 RegEx,而不是 regex.test() 方法。

当然,我对其他解决方案持开放态度。为了更好地理解我需要什么,这里是另一个fiddle:http://jsfiddle.net/nLr6h42p/

so the expression should be negated

You are asking an XY problem。您不需要“否定正则表达式”(这是提议的解决方案),您正在尝试清理用户输入(这是真正的问题).

顺便说一句,这应该可能发生在后端,而不是前端,因为通过直接向服务器。但暂时忽略它...

我认为您要实现的目标是这样的:

$input.val($input.val().match(/[0-9]+\.?[0-9]{0,2}/));

Demo