正如标题所示,我需要一个可以验证输入字符串的正则表达式,以确保它是一个介于 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 位小数。
正如标题所示,我需要一个可以验证输入字符串的正则表达式,以确保它是一个介于 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)(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)
出来。
尽管可以编写一个正则表达式来测试上述所有条件,但我不会那样做。
我会先用正则表达式检查小数点后的位数,然后在解析字符串后将范围测试留给。
下面的这个正则表达式将允许小数点后有 0 到 2 位数字(例如1.20
, 1.
, 1.1
, 2
)。注意这种情况1.
- 如果您不想要这种情况,请更改{0,2}
为{1,2}
^\d+(\.\d{0,2})?$
请注意,.2
上述正则表达式认为这是无效的,因为正则表达式确保整个部分始终包含至少 1 个数字。
验证字符串后,您可以解析数字并检查其范围,就像在 Patashu 的回答中一样。
那应该这样做:
^([12]?\d(\.\d{2})?|30(\.\d{2})?)$
[12]?\d(.\d{2})? - 这适用于从 1 到 29.99 或 30.00 或 30 的数字