我正在寻找可以输入以下内容的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
答案 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)})