Regex 0-200.0000范围的正则表达式(包括0和200)

Regex 0-200.0000范围的正则表达式(包括0和200),regex,max,decimal,Regex,Max,Decimal,我正在尝试编写正则表达式,它接受介于0和200.0000之间的数字 ^(?:(?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?|200(?:\.0{1,4})?)$ 我现在设法写了这篇文章: ^([0-9]|[1-8][0-9]|9[0-9]|1[0-9]{2}|200){1}(\.[0-9]{1,4})?$ 但问题是我的表达式接受像200.0001或更大的数字 如果小数点后的数字是200,您知道如何设置小数点后的数字限制吗?感谢问题在于(\.[0-9]{1

我正在尝试编写正则表达式,它接受介于
0
200.0000
之间的数字

^(?:(?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?|200(?:\.0{1,4})?)$
我现在设法写了这篇文章:

^([0-9]|[1-8][0-9]|9[0-9]|1[0-9]{2}|200){1}(\.[0-9]{1,4})?$
但问题是我的表达式接受像
200.0001
或更大的数字


如果小数点后的数字是
200
,您知道如何设置小数点后的数字限制吗?感谢问题在于
(\.[0-9]{1,4})
匹配一个可选的点序列和
0
1
11
111
200
之后的任意四位数字。您需要对
200
之前的数字使用
(\.[0-9]{1,4})
,对
200
使用
(\.0{1,4})

^(?:(?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?|200(?:\.0{1,4})?)$

我建议使用非捕获组而不是捕获组(即,将
(…)
转换为
(?:…)
),因为您以后不会使用这些部分

我看到你的模式是自动的,所以我决定“缩小”它一点

图案细节

  • ^
    -字符串的开头
  • (?:
    -开始匹配两个备选方案的非捕获组:
    • (?:[1-9]?[0-9]| 1[0-9]{2})(?:\[0-9]{1,4})?
      • (?:[1-9]?[0-9]| 1[0-9]{2})
        -从
        1
        9
        的可选数字,然后是任意1位,或
        1
        后跟任意两位
      • (?:\.[0-9]{1,4})
        -点的可选序列,后跟一到四个任意数字
    • |
      -或
    • 200(?:\.0{1,4})
      -
      200
      后接1或0次
      后接1到4个零
    • )$
      -组和字符串的结尾

这是由于
[0-9]{1,4}
。使用
0{1,4}
。如果要匹配
200
之前小数部分中的任何数字,您需要为
200
和以前的可选项设置两个不同的可选组。请参阅
^(?(?:[1-9]?[0-9]?[0-9]{2})(?:\[0-9]{1,4});[200(?:\.0{1,4})$
()。很高兴它对您有用。如果我的回答证明对你有帮助(请参阅),你也可以考虑投票,因为在达到15个代表点后你有权获得投票权。注意:你可以投票选出所有有帮助的答案。