我需要正则表达式来使用 javascript 验证可能包含千位分隔符或小数的数字。最大值为9,999,999.99
最小值0.01
其他有效值:
11,111
11.1
1,111.11
无效值:
1111
1111,11
,111
111,
我没有快乐地到处寻找。
我需要正则表达式来使用 javascript 验证可能包含千位分隔符或小数的数字。最大值为9,999,999.99
最小值0.01
其他有效值:
11,111
11.1
1,111.11
无效值:
1111
1111,11
,111
111,
我没有快乐地到处寻找。
/^\d{1,3}(,\d{3})*(\.\d+)?$/
关于最小值和最大值......好吧,我不会用正则表达式来做,但你可以在开头添加前瞻:
/^(?!0+\.00)(?=.{1,9}(\.|$))\d{1,3}(,\d{3})*(\.\d+)?$/
注意:这允许0,999.00
,因此您可能需要将其更改为:
/^(?!0+\.00)(?=.{1,9}(\.|$))(?!0(?!\.))\d{1,3}(,\d{3})*(\.\d+)?$/
这将不允许前导 0。
编辑:
测试:http: //jsfiddle.net/pKsYq/2/
((\d){1,3})+([,][\d]{3})*([.](\d)*)?
它适用于一些,但我仍在学习正则表达式。
逻辑应该是 1-3 位 0-1 次,1 个逗号后跟 3 位任意次数,以及单个 . 后跟任意位数 0-1 次
Tezra 的公式对于“1”无效。或“1.0”。出于我的目的,我允许前导零和尾随零,以及前导 + 或 - 号,如下所示:
^[-+]?((\d{1,3}(,\d{3})*)|(\d*))(\.|\.\d*)?$
首先,我想指出,如果您拥有数据来源的表单,限制输入的最佳方法是使用正确的表单元素(又名数字字段)
<input type="number" name="size" min="0.01" max="9,999,999.99" step="0.01">
是否可以输入“,”将取决于浏览器,但浏览器始终会将值作为实际数字提供给您。(请记住,所有表单数据也必须在服务器端进行验证/清理。永远不要相信客户端)
其次,我想将其他答案扩展到更强大(独立于平台)/可修改的正则表达式。
^<my_regex>$
(<regex>)?
\.\d+
[1-9]
“非零数字”,所以\.\d+[1-9]
([1-9]<rest-of-number-regex>|0)
[1-9]\d{0,2}
(,\d{3})*
(,?\d{3})*
把它们放在一起
^([1-9]\d{0,2}(,?\d{3})*|0)(\.\d+[1-9])?$
在最近的一个项目中,我们需要更改此版本以满足国际要求。这是我们使用的:^-?(\d{1,3}(?<tt>\.|\,| ))((\d{3}\k<tt>)*(\d{3}(?!\k<tt>)[\.|\,]))?\d*$
创建一个命名组(?<tt>\.|\,| )
允许我们在(?!\k<tt>)[\.|\,])
以后使用负前瞻来确保千位分隔符和小数点实际上是不同的。
我使用下面的正则表达式进行以下限制 -
^(?!0|\.00)[0-9]+(,\d{3})*(.[0-9]{0,2})$