正如标题所示,我需要一个可以验证输入字符串的正则表达式,以确保它是一个介于1-30和最多2位小数之间的数字。
例如,
4 is fine
10.25 is fine
15.3 is fine
29.99 is fine
30 is fine
30.01 is not fine
编辑:所以它必须是一个正则表达式,因为我正在使用的系统的限制,我已经尝试了几件事,
我可以达到
^\d{1,2}(\.\d{1,2})?$
允许最多2位数字,最多2位小数。
答案 0 :(得分:4)
编辑:对于需要正则表达式的具体情况,请尝试以下操作:
^(?!0)(30(\.0{1,2})?|[12]?\d(\.\d{1,2})?)$
故障:
^ ... $
- 确保正则表达式在字符串的开头和结尾处开始和结束。
(?!0)
- 负向前瞻以确保我们不以0
(30(\.0{1,2})?
- 30可选地后跟.0或.00
|
或......
[12]?
仅限1或2的数字
\d
一个非可选单位数字
(\.\d{1,2})?
可选.digit或.digitdigit
不幸的是,这个正则表达式不容易调整以适应任何数字范围。 (编写一个程序来自动吐出像这样的正则表达式,这将是一个有趣的项目。)
否则我会说:不要重新发明轮子。
double result;
if (double.TryParse(inputstring, out result))
{
if (result >= 1.0 & result <= 30.0)
{
return true;
}
}
return false;
如果它不是小数点后两位而你需要它,你可以计算Round(result, 2)
所以它是。
答案 1 :(得分:0)
虽然可以编写单个正则表达式来测试上述所有条件,但我不会这样做。
我首先检查带有正则表达式的小数点后的位数,并在解析字符串后保留范围测试。
以下正则表达式将允许小数点后的0到2位数(例如1.20
,1.
,1.1
,2
)。请注意案例1.
- 如果您不想要这种情况,请将{0,2}
更改为{1,2}
^\d+(\.\d{0,2})?$
请注意,.2
被上述正则表达式视为无效,因为正则表达式确保整个部分始终包含至少1位数。
验证字符串后,您可以解析数字并检查其范围,例如Patashu的答案。
答案 2 :(得分:0)
应该这样做:
^([12]?\d(\.\d{2})?|30(\.\d{2})?)$
[12]?\ d(。\ d {2})? - 这个数字从1到29.99 或30.00或30