我遇到了麻烦。我只想允许从 0 到 24999999.99 的任何数字。我是正则表达式的新手,对此有困难。
问问题
113 次
4 回答
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.
在这里查看它的实际应用。
但你可能最好这样做getFloatValue(str)<24999999.99
。
于 2013-11-08T23:34:53.567 回答
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}
- 捕获小数
于 2013-11-08T19:47:12.673 回答
0
只考虑小数点后两位。此外,没有负数。
^[0-2]?[0-4]?\d?\d?\d?\d?\d?\d(?:\.\d{1,2})?$
于 2013-11-08T20:19:15.783 回答
0
正如评论中提到的,这可以通过数学比较更好地处理。
但是,如果您必须有正则表达式,请尝试以下操作
^(?:[0-1]?[0-9]|2[0-4])?[0-9]{0,6}(?:\.[0-9]+)?$
于 2013-11-08T20:26:21.430 回答