正则表达式以逗号分隔的浮点数列表

时间:2016-03-29 05:49:59

标签: javascript regex

我正在尝试在javascript中验证表单字段(使用bootstrap / jquery)但我需要一个匹配字符串的正则表达式,这是一个以逗号分隔的数字列表,可能有也可能没有空格。

例如: 1,2,3,3.14,6.0,-3.14,-6,7.13,100

如果它们都是整数而且中间没有空格,我可以得到正则表达式,但是小数点真的很复杂。

4 个答案:

答案 0 :(得分:3)

你可以试试这个:

^(\s*-?\d+(\.\d+)?)(\s*,\s*-?\d+(\.\d+)?)*$



document.write(
    /^(\s*-?\d+(\.\d+)?)(\s*,\s*-?\d+(\.\d+)?)*$/.test(
        '1,2,3,3.14,6.0, -3.14, -6, 7.13,100'
    )
);




如果你打破上面的正则表达式,你会发现它正在捕获字符串中的第一个数字:

(\s*-?\d+(\.\d+)?)

要捕获第一个数字,它会根据需要尝试匹配尽可能多的连续空格\s*,然后是可选的连字符(或负号)-?,后跟至少一个数字{{1 ,后跟一个可选的小数点,在小数点\d+后面至少有一个连续的数字。

下一组捕获第一组之后的所有数字。

(\.\d+)?

与前一个组相同,但前面有一个额外的(\s*,\s*-?(\d+(\.\d+)?)* ,在匹配逗号\s*,之前允许尽可能多的空格\s*。该组将根据需要重复多次,

正则表达式以*开头,以^结束,以确保它从字符串$的开头开始匹配,直到字符串^结束。< / p>

答案 1 :(得分:2)

如果正则表达式不是强制性的,那么试试这个简单的逻辑

function isValidInput(str)
{
   return str.split(",").filter(function(val){ return isNaN(val) }).length == 0;
}
isValidInput("1,2,3,3.14,6.0, -3.14, -6, 7.13,100");

答案 2 :(得分:0)

@ gurvinder372答案的替代方案,您可以使用Array.every代替Array.filter。好处,它不会循环到最后,并会在第一次无效输入时中断。但是,如果你想获得所有不正确的值,那么@ gurvinder372的答案是首选。

function isValidInput(str) {
  return str.split(",").every(function(val) {
    return !isNaN(val);
  })
}
var test = isValidInput("1,2,3,3.14,6.0, -3.14, -6, 7.13,100");

alert(test);

答案 3 :(得分:0)

你可以试试这个

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

正则表达式分解

^ ---> Starting of string
  (\s* ---> Match any number of white spaces
     (-|\+)? ---> Match - or + sign (optional)
     \d+ ---> Match digits before decimal
     (?:\.\d+)? ---> Non capturing group to match digits after decimal(optional)
     \s*,\s* ---> Match any number of spaces before and after comma
  )+ ---> Do this till last comma (or second last number)

  (-|\+)?\d+(?:\.\d+)? ---> Same as above but for checking only the last number as it should not have comma
  \s* ---> Check spaces after last number
$ ---> End of string

Demo