使用正则表达式匹配除带有两位小数的数字以外的所有内容。

5

我有一个适合喜欢正则表达式的人的不错挑战,就像我一样。不幸的是,我无法解决这个问题。

这个正则表达式是反向匹配。我需要匹配除了某些特定数量之外的所有内容,例如:

这些类型不应该匹配:

0,00
0.00
12314345.7
24234.54
34435,00
34545,43

这些类型应该匹配:

.00
,87
1e3,67

所以在JavaScript中,除了带有逗号或点的小数金额之外的所有内容都需要匹配(是的,是反向的)。

我已经做了这个:

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

但是,很显然,当它通过多个逗号或点时,它无法正常工作,并且不会将小数限制为最多两个。


但是你为什么需要它呢?我想为有效模式创建一个正则表达式相当简单,任何不满足该正则表达式的内容都可以作为解决方案。或者这只是为了挑战而已? - Dhrubajyoti Gogoi
@RobG 询问正则表达式应该运行的格式化输入。输入格式将影响正则表达式。例如,在您编辑问题之前,您的输入是逐行值。 - Onur Yıldırım
两组数字遵循相同的模式。如果你没有非常具体和严格的表达方式,我会感到惊讶,你能匹配上这个模式。 - Vasili Syrakis
正则表达式对于应用程序中前端输入框是必需的。 - Matt
如果12314345.7只有一个小数位,为什么它不应该匹配? - Ulugbek Umirov
显示剩余4条评论
2个回答

1
使用负向先行断言的解决方案:
^(?!\d+([,.]\d{0,2})?$).*$

http://regex101.com/r/jY3tC3

注意:这个正则表达式需要锚定。我已经在^$之间锚定了。


这非常好!就快完成了。它在“1。”,“1,”上失败了,但也在“1.55555555”上失败了。 - Matt
再试一次。我没有\d{0,2}。 - Lodewijk Bogaards
1
胜利者获得鸡肉晚宴!它的工作方式符合预期,并匹配所有不当值。 - Matt

0

试试这个:

/^(?!(\d+[\.,]\d+)).*$/gm

请查看更新的演示


嗨Onur。抱歉,那个不起作用。但我已经可以告诉你它不会起作用。您正在过滤a-zA-Z,而我想过滤除0-9以外的所有内容。 - Matt
[a-z]更改为[\D][^0-9]以匹配任何非数字。 - RobG
这是可以接受的:"aasdd.dd"和"1e34333.ff"。所以这不好。不过解决方案很不错,我喜欢它。 - Matt
以下内容无法通过测试:fff,00 1e34 hufreh pokrg,ji - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接