我正在尝试在javascript中验证表单字段(使用bootstrap / jquery)但我需要一个匹配字符串的正则表达式,这是一个以逗号分隔的数字列表,可能有也可能没有空格。
例如: 1,2,3,3.14,6.0,-3.14,-6,7.13,100
如果它们都是整数而且中间没有空格,我可以得到正则表达式,但是小数点真的很复杂。
答案 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