【发布时间】:2021-05-19 10:21:09
【问题描述】:
我想验证一个数字最大长度为 13 且小数点后 2 位的货币字符串。我有一个逗号作为小数分隔符和一个句点作为千位分隔符。
我有这个正则表达式:
/^(\d{1}\.)?(\d+\.?)+(,\d{2})?$/
对于 sintax 是有效的,但对于最大长度无效。我需要在这个正则表达式中添加什么?
例如,这些字符串必须是有效的:
1.000.000.000.000
1.000.000.000.000,00
1
1,00
123,45
而且这些一定是无效的:
10.000.000.000.000
10.000.000.000.000,00
10.000.000.000.000.000
10.000.000.000.000.000,00
【问题讨论】:
-
如果您需要确保字符串中的数字少于 16 位,请在
^之后添加(?!(?:\D*\d){16})。 -
感谢@WiktorStribiżew 的回答,是有效的,但比其他答案要复杂一些。
-
我不认为
(?=[\d.]{1,17}(?:,\d{2})?$)比(?!(?:\D*\d){16})“简单”,但请随意使用最适合您的任何解决方案。(?!(?:\D*\d){16})语法是通用的,可以忽略任何非数字的计数。(?![\d.]{18})遵循类似的逻辑(尽管它必须依赖后续的消费模式才能正常工作),但更具体,因为它只将点匹配为非数字。 -
抱歉,我不是正则表达式专家,我无法在 regex101 或类似页面中尝试您的解决方案。但是我了解您的解决方案,无法尝试,这有点复杂。非常感谢您的宝贵时间。问候。
标签: javascript regex currency