目前我正在使用此正则表达式来匹配带有单个小数点的正数
/^\d+(\.\d+)?$/
但这不允许使用逗号。如何修改它以允许小数点前的零或多个逗号?
示例:
编辑:
有效值
可以使用或不使用逗号输入值。 该字段的数据类型是SQL MONEY,因此它将处理逗号。
答案 0 :(得分:3)
需要
/^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/
请参阅regex demo
<强>详情
^
- 字符串开头(?:\d{1,3}(?:,\d{3})*|\d+)
- 以下任何一项:
\d{1,3}(?:,\d{3})*
- 1到3位数后跟0 + ,
和3位数的序列|
- 或\d+
- 一位或多位(?:\.\d+)?
- .
和1+位数的可选序列$
- 字符串结束。
var strs = [',,,,', '111', '11,111', '11,111.0', '111111'];
var re = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
for (var s of strs) {
console.log(s + " => " + re.test(s));
}
答案 1 :(得分:1)
这是一个非常简单的通用解决方案,不需要考虑需要多少位数。
/^\d[\d,]*(\.\d+)?$/
[\d,]
将匹配数字或逗号
如果你真的需要它更具体,你可以使正则表达式更复杂。
答案 2 :(得分:1)
答案 3 :(得分:0)
这很难读,但我会解释它
/^(?:\d+)(?:(?:\d+)|(?:(?:,\d+)?))+(?:\.\d+)?$/
所有?:
只是明确地对正则表达式引擎说'不要捕获下面这个匹配的组。)
简化版将是
/^(\d+)((\d+)|((,\d+)?))+(\.\d+)?$/
但是它无缘无故地捕获了很多匹配组,所以我删除了它们