Regex表示带小数和千位分隔符的数字
Regex for number with decimals and thousand separator
我需要regex来验证一个可以使用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+)?$/
关于最小值和最大值。。。好吧,我不会用正则表达式来做,但你可以在开头添加lookahead:
/^(?!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)*)?
它在一些方面起了作用,但我仍在学习regex。
逻辑应该是1-3位数字0-1次,1个逗号后面跟着3位数字任意次数,并且是单个。后面跟着任意数量的数字0-1倍
首先,我想指出的是,如果您拥有数据来源的表单,限制输入的最佳方法是使用正确的表单元素(也称为数字字段(
<input type="number" name="size" min="0.01" max="9,999,999.99" step="0.01">
是否可以输入","将取决于浏览器,但浏览器将始终以实际数字的形式为您提供值。(请记住,所有表单数据也必须在服务器端进行验证/消毒。永远不要信任客户端(
其次,我想扩展一个更健壮(独立于平台(/可修改的regex的其他答案。
- 您应该用^和$将正则表达式括起来,以确保与整个数字匹配,而不仅仅是它的子集。例如
^<my_regex>$
- 小数的右边是可选的,所以我们可以把它放在一个可选的组
(<regex>)?
中 - 匹配一个文字周期而不是任何数字链就是简单的
'.'d+
- 如果你想坚持小数点后的最后一个数字不是0,你可以用
[1-9]
表示"非零数字",所以'.'d+[1-9]
- 如果你想坚持小数点后的最后一个数字不是0,你可以用
- 对于小数的左侧,前导数字将为非零,或者该数字为零。所以
([1-9]<rest-of-number-regex>|0)
- 第一组数字为1-3位,因此
[1-9]'d{0,2}
- 之后,我们必须在3秒内添加数字,因此
(,'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>)['.|',])
,以确保千位分隔符和小数点实际上是不同的。
Tezra的公式在"1."或"1.0"时失败。出于我的目的,我允许前导和尾随零,以及前导+或-符号,如下所示:
^[-+]?(('d{1,3}(,'d{3})*)|('d*))('.|'.'d*)?$
我已经使用下面的reglex进行以下重试-
^(?!0|'.00)[0-9]+(,'d{3})*(.[0-9]{0,2})$
- 不允许0和.00
- ','(千分隔符(后的3位数字
- '。'(小数点后2位(
- 图表.js 2.0 使用货币和千位分隔符格式化 Y 轴
- 千位分隔符的正则表达式
- 如何将带有逗号千位分隔符的字符串解析为数字
- 图表.js使用货币和千位分隔符设置Y轴的格式
- 使用美元符号和千位分隔符格式化引导表
- 显示带有千位分隔符的数字
- 高图 y 轴千位分隔符
- 带千位分隔符的计数器
- 在 Javascript 函数 (ASP.net) 上使用句点的千位分隔符
- 增强千位分隔符的正则表达式
- 向 jQuery 计数器添加千位分隔符
- 如何在我的html表单中添加千位分隔符
- 千位分隔符使用空白
- 用撇号作为千位分隔符格式化数字
- d3.在变量上格式化千位分隔符
- Regex表示带小数和千位分隔符的数字
- Javascript函数比较两个千位分隔符数字不工作
- javascript中整数的千位分隔符
- 正则表达式,用于不处理点后面的数字的正向前看千位分隔符
- 如何用千位分隔符解析两个空格分隔的数字