正则表达式匹配数字0-99.999

时间:2011-01-10 14:09:10

标签: regex

我需要一个匹配0到99.999之间的数字的正则表达式(99,999也有效)。

有效示例:

1,1
99.9
12.876
1,777

无效的例子:

9837,83
-12,24
11.1112

4 个答案:

答案 0 :(得分:2)

^\d{1,2}(?:[.,]\d{1,3})?$

应该这样做。

<强>解释

^         # anchor the match at the start of the string
\d{1,2}   # match one or two digits
(?:       # optionally match the following group:
 [.,]     # a . or ,
 \d{1,3}  # 1-3 digits
)?        # end of optional group
$         # anchor the match the end of the string

答案 1 :(得分:2)

如果你想检查一个数字在一定范围内,你不应该使用正则表达式,它与你正在做的事情的逻辑太远了,很难调试。我会先用小数点替换逗号。然后检查范围。

例如(Javascript)

function isValid(inputString)
{
   var number=parseFloat(inputString.replace(',','.'));
   return (number>=0 && number <=99.999);
}

更新了答案

上述解决方案并未考虑OP要求精度不超过3位小数。

function isValid(inputString){
   var number=parseFloat(inputString.replace(',','.'));
   validPrecision = true;
   if (inputString.split('.')[1]) {
       validPrecision=inputString.split('.')[1].length<=3;}
   return (number>=0 && number <=99.999 && validPrecision);
};

答案 2 :(得分:1)

这会有用吗?

[0-9]{1,2}[.,][0-9]{1,3}

这匹配类似的东西:

  • 0.0 / 01,1
  • 99,999 / 09.009

但不是这样的东西:

  • .0 / ,1 / 1 / 01
  • 099,999 / 09.0090
希望它有所帮助。

答案 3 :(得分:1)

以下内容可行:

^\d{1,2}((,|.)\d{1,3})?$