我需要正则表达式来使用 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])?$
我在下面的正则表达式中使用了以下限制 -
^(?!0|\.00)[0-9]+(,\d{3})*(.[0-9]{0,2})$