javascript中的正则表达式只允许数字,逗号和单个小数点

时间:2016-10-25 08:01:28

标签: javascript regex

目前我正在使用此正则表达式来匹配带有单个小数点的正数

/^\d+(\.\d+)?$/

但这不允许使用逗号。如何修改它以允许小数点前的零或多个逗号?

示例:

  • 11,111.00(应该被允许) 我可以使用小数点前有任意数字逗号的数字。

编辑:

有效值

  • 111
  • 11111
  • 11,111.0
  • 111111

可以使用或不使用逗号输入值。 该字段的数据类型是SQL MONEY,因此它将处理逗号。

4 个答案:

答案 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)

我会用这个

^(?:\d{1,3}(,\d{3})*|\d+|\d{2}(?:,\d{2})*,\d{3})(?:\.\d+)?$

请参阅demo and explanation

答案 3 :(得分:0)

这很难读,但我会解释它

/^(?:\d+)(?:(?:\d+)|(?:(?:,\d+)?))+(?:\.\d+)?$/

所有?:只是明确地对正则表达式引擎说'不要捕获下面这个匹配的组。)

简化版将是

/^(\d+)((\d+)|((,\d+)?))+(\.\d+)?$/

但是它无缘无故地捕获了很多匹配组,所以我删除了它们