我想知道一个字符串是否是一个有效的范围,以-作为分隔符。像这样的例子应该通过测试:
-
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]+[.]*)+/个
/(-?[0-9]+[.]*)+-(-?[0-9]+[.]*)+/
k3bvogb11#
Regex不执行算术运算,因此确保左侧的数字小于右侧的数字需要额外的处理。您可以验证输入的格式是否正确,并使用捕获组提取数字:
^(-?\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);
型
1条答案
按热度按时间k3bvogb11#
Regex不执行算术运算,因此确保左侧的数字小于右侧的数字需要额外的处理。
您可以验证输入的格式是否正确,并使用捕获组提取数字:
字符串
^
-行开始(
-启动捕获组-?
-可选破折号(负数)\d*\.?\d+
-允许浮点数或整数)
-结束捕获组-
-范围破折号(
-启动捕获组-?
-可选破折号(负数)\d*\.?\d+
-允许浮点数或整数)
-结束捕获组$
-行尾https://regex101.com/r/m6cT2o/1
然而,为了验证第一数目小于第二数目需要额外的JS处理。
型