gpt4 book ai didi

javascript - 匹配 float 列表的正则表达式

转载 作者:行者123 更新时间:2023-12-03 00:50:27 25 4
gpt4 key购买 nike

我正在寻找一个允许以下输入的正则表达式:

100,120

10.50,100

129,10.6

1.1,2.4

并拒绝任何其他输入。基本上,验证数字( float 或整数)的正则表达式是否正确地用逗号(,)分隔。

下面是我的 HTML 输入代码,

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

试用:

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

此正则表达式在出现

的情况下显示无效输入

1,21,2,31.0,1.2

最佳答案

这里应该是一个有效的正则表达式(注意:非捕获组比捕获组的性能更好):

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

在此正则表达式中:

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

float 是第一个或第二个形状的

明白了,您想要的是一个浮点列表,即单个项目或一个项目后跟一些项目,每个项目都以逗号为前缀。这就是 (?:,...) 的含义,其中 ... 是第一项正则表达式。

通过的测试:

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;
}

关于javascript - 匹配 float 列表的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53067586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com