我正在尝试编写接受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 :(得分:0)
问题是(\.[0-9]{1,4})?
与点的可选序列和0
,1
,{{1}之后的一到四个任意数字匹配},11
和 111
。您需要将200
之前的数字用(\.[0-9]{1,4})?
,将200
的数字用(\.0{1,4})?
。
200
请参见this demo
我建议您使用非捕获组而不是捕获组(即将^(?:(?:[1-9]?[0-9]|1[0-9]{2})(?:\.[0-9]{1,4})?|200(?:\.0{1,4})?)$
转换为(...)
),因为您以后将不使用这些部分。
我看到您的模式自动为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})?
-或|
-200(?:\.0{1,4})?
后跟1或0次出现的200
,后跟1至4个零.
-组和字符串的结尾。