我需要正则表达式来验证一个可以使用javascript包含千位分隔符或小数的数字。
最大值为9,999,999.99
最小值0.01
其他有效值:
11,111
11.1
1,111.11
INVALID值:
1111
1111,11
,111
111,
我一直在搜索,没有任何快乐。
答案 0 :(得分:17)
/^\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/
答案 1 :(得分:2)
((\d){1,3})+([,][\d]{3})*([.](\d)*)?
它有一些,但我仍然在学习正则表达式。
逻辑应为1-3位0-1次,1个逗号后跟3位数任意次,并且单个。后跟任意数字的数字0-1次
答案 2 :(得分:1)
我使用以下regrex进行以下限制 -
^(?!0|\.00)[0-9]+(,\d{3})*(.[0-9]{0,2})$
答案 3 :(得分:0)
在最近的项目中,我们需要更改此版本以满足国际要求。
这就是我们使用的:^-?(\d{1,3}(?<tt>\.|\,| ))((\d{3}\k<tt>)*(\d{3}(?!\k<tt>)[\.|\,]))?\d*$
创建命名组(?<tt>\.|\,| )
允许我们稍后使用否定的外观(?!\k<tt>)[\.|\,])
,以确保千位分隔符和小数点实际上不同。
答案 4 :(得分:0)
首先,我想指出的是,如果您拥有数据的来源表单,则限制输入的最佳方法是使用适当的表单元素(又称为数字字段)
<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])?$
答案 5 :(得分:0)
Tezra的公式对于“ 1”失败。或“ 1.0”。就我的目的而言,我允许前导和尾随零,以及前导+或-号,例如:
^[-+]?((\d{1,3}(,\d{3})*)|(\d*))(\.|\.\d*)?$