regex JavaScript正则表达式测试一个数字(整数或小数,正数或负数)范围

koaltpgm  于 2023-08-08  发布在  Java
关注(0)|答案(1)|浏览(69)

我想知道一个字符串是否是一个有效的范围,以-作为分隔符。像这样的例子应该通过测试:

1-5
1-10.1
10.5-20.5
-10.5-8
-2--1 << minus two to minus one
-3.5--1
-20.5--2.1

字符串
从负到负的范围没有空格可能看起来很奇怪,但我坚持这样做。
你认为这个正则表达式足够好吗?
/(-?[0-9]+[.]*)+-(-?[0-9]+[.]*)+/

k3bvogb1

k3bvogb11#

Regex不执行算术运算,因此确保左侧的数字小于右侧的数字需要额外的处理。
您可以验证输入的格式是否正确,并使用捕获组提取数字:

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

字符串

  • ^-行开始
  • (-启动捕获组
  • -?-可选破折号(负数)
  • \d*\.?\d+-允许浮点数或整数
  • )-结束捕获组
  • --范围破折号
  • (-启动捕获组
  • -?-可选破折号(负数)
  • \d*\.?\d+-允许浮点数或整数
  • )-结束捕获组
  • $-行尾

https://regex101.com/r/m6cT2o/1
然而,为了验证第一数目小于第二数目需要额外的JS处理。

var rangeRegex = /^(-?\d*\.?\d+)-(-?\d*\.?\d+)$/;
var str = '-10.5-8';

var array = str.match(rangeRegex);

if( array !== null && array[1] < array[2]){
  console.log('good');
}
else{
  console.log('bad');
}

console.log(array);

相关问题