我正在尝试编写接受 0
和 200.0000
之间数字的正则表达式。
我现在设法写了这个:
^([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
, 也。您需要使用 (\.[0-9]{1,4})?
200
之前的数字和 (\.0{1,4})?
对于 200
.
^(?:(?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?|200(?:\.0{1,4})?)$
参见 this demo
我建议使用非捕获组而不是捕获组(即将 (...)
转换为 (?:...)
),因为您以后不会使用这些部分。
我看到你的模式是generated online自动,所以我决定稍微“缩小”它。
图案细节
-
^
- 字符串开始 -
(?:
- 匹配两个备选方案的非捕获组的开始:-
(?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?
:-
(?:[1-9]?[0-9]|1[0-9]{2})
- 来自1
的可选数字至9
然后是任何一位数字,或1
后跟任意两位数 -
(?:\.[0-9]{1,4})?
- 一个可选的点序列,后跟一到四个 any 数字
-
-
|
- 或者 -
200(?:\.0{1,4})?
-200
后跟出现 1 次或 0 次.
后跟 1 到 4 个零 -
)$
- 组和字符串的结尾。
-
关于regex - 范围 0-200.0000(包括 0 和 200)的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54574328/