正则表达式匹配浮点数列表

时间:2018-10-30 15:19:08

标签: javascript regex

我正在寻找可以输入以下内容的RegEx:

100,120

10.50,100

129,10.6

1.1,2.4

并拒绝任何其他输入。 基本上,验证数字(浮点数或整数)的RegEx用逗号(,)正确分隔。

下面是我用于HTML输入的代码

<input type='text' className='form-control' pattern='/^-?\d*\.?\d*$/' required/>

试用:

我尝试将建议的正则表达式/^-?\d+(?:\.\d+)?,-?\d+(?:\.\d+)?$/包装在\内并附加到pattern属性。

如果

,此正则表达式显示无效输入

1,2 1,2,3 1.0,1.2

2 个答案:

答案 0 :(得分:1)

这里应该是一个正常运行的RegExp (注意:非捕获组要比捕获组要好一些)

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

在此正则表达式中:

  • \d+(?:\.\d*)? =一个单独的整数部分,或者一个带有小数点的点的值
  • \.\d+ =仅小数部分(即小数点后跟数字)

浮点是第一个或第二个形状的

对此,您想要的是一个浮动列表,即单个项目或一个项目,然后是一些项目,每个项目都以逗号为前缀。这就是(?:,...)的意思,其中...是第一项正则表达式。

这些测试通过了:

a-> false
1-> true
2.-> true
.3-> true
1,2-> true
,-> false
1,-> false
,2,-> false
5,6,a-> false
5,a,6-> false
1,.2,3.,4.5-> true
1,.2,.3,4,5,a,6-> false

下面是一个有效的代码段,可以进行其他测试:

r = /^(?:\d+(?:\.\d*)?|\.\d+)(?:,(?:\d+(?:\.\d*)?|\.\d+))*$/;
Array(
  "a",
  "1",
  "2.",
  ".3",
  "1,2",
  ",",
  "1,",
  ",2,",
  "5,6,a",
  "5,a,6",
  "1,.2,3.,4.5",
  "1,.2,.3,4,5,a,6").forEach(function(e) {
  console.log(e + "-> " + 
              r.test(e));
});

如果允许使用另一种方法,为什么不使用parseFloat,如下所示:

Array(
      "a",
      "1",
      "2.",
      ".3",
      "1,2",
      ",",
      "1,",
      ",2,",
      "5,6,a",
      "5,a,6",
      "1,.2,3.,4.5",
      "1,.2,.3,4,5,a,6").forEach(function(e) {
      console.log(e + "-> " + 
                  areThoseCommaSeparatedFloats(e));
    });

function areThoseCommaSeparatedFloats(line) {
  try {
    line.split(",").forEach(function(v) {
      // If the value is not a float
      // (in which case parseFloat return NaN)
      // throw an exception
      if (isNaN(parseFloat(v))) throw {};
    });
  } catch (e) {
    // A not-a-number value was found
    return false;
  }
  // All the values are numbers
  return true;
}

答案 1 :(得分:0)

最后使用array.split(',')isNaN()来验证以逗号分隔的十进制和整数的组合。

var input = Array.from(input.value.split(',').map(item => item.trim())); input.some(function(i) {return isNan(i)})