我遇到了麻烦。我想只允许0到24999999.99之间的任何数字。我是正则表达式的新手,我对此有困难。
答案 0 :(得分:2)
^0*(\d{0,7}(\.\d+)?|1\d{7}(\.\d+)?|2[0-4]\d{6}(\.(9([0-8]\d*)?|990*|[0-8]\d*))?)$
通过教程,我会为你解决这个问题:
^ Match the beginning of the string
0* Any number of leading Zeros, including none
(
\d{0,7} Zero to seven digits.
(\.\d+)? An optional decimal followed by one or more digits
| OR
1\d{7} A one followed by exactly seven digits
(\.\d+)? The decimal expression again
| OR
2[0-4] A two, followed by 0, 1, 2, 3, or 4
\d{6} ... followed by six digits (exactly)
(
\.( A decimal point, with...
9 A nine
(
[0-8]\d* Any digit except nine, followed by any number of digits
)? optionally
| OR
990* Two nines, followed by any number of zeros
| OR
[0-8]\d* Any number except 9, followed by any number of digits
)
)? This whole decimal expression has been optional
)
$ End of String.
在行动here中查看。
但你最好不要做getFloatValue(str)<24999999.99
。
答案 1 :(得分:0)
假设两位小数是固定的,您可以将其与:
匹配^(?:(?:\d{1,7})|(?:[0-1]\d{1,7})|(?:2[0-4]\d{1,6}))(?:\.\d{2}){0,1}$
这里^
和尾随$
使它匹配一个完整的字符串,但你可以将它们排除(问题是如果有人只输入1个小数,它将匹配而不包含小数)。 \d
是数字字符,我使用{m,n}
来说明最小和最大重复次数。 (?: )
将小数点和小数与?:
组合在一起,使其成为非捕获组,因为您不需要捕获这些值。
小组细分:
(?:(?:\d{1,7})
- 捕获低于10000000.00的值(?:[0-1]\d{1,7})
- 捕获低于20000000.00的值(感谢@jkshah发现错误时发现错误)(?:2[0-4]\d{1,6})
- 捕获高于20000000.00的值并检查前导24 (?:\.\d{2}){0,1}
- 捕获小数答案 2 :(得分:0)
只考虑两个小数点。此外,没有负数。
^[0-2]?[0-4]?\d?\d?\d?\d?\d?\d(?:\.\d{1,2})?$
答案 3 :(得分:0)
正如评论中所提到的,通过数学比较可以更好地处理这个问题。
但如果你必须有正则表达式,那么试试
^(?:[0-1]?[0-9]|2[0-4])?[0-9]{0,6}(?:\.[0-9]+)?$