使用正则表达式验证字符串 - 1-30,最多2位小数

时间:2013-05-03 04:59:04

标签: c# regex validation

正如标题所示,我需要一个可以验证输入字符串的正则表达式,以确保它是一个介于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位小数。

3 个答案:

答案 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.201.1.12)。请注意案例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

相关问题