如何验证像00.00这样的小数?

时间:2014-06-16 15:14:28

标签: c# asp.net validation webforms decimal

我正在学习验证表达式并尝试编写一个来检查小数,如下例所示,但我遇到了一些问题。

要验证的数字是这样的:

<00> 00.00(任何2个数字,然后a。,然后任意2个数字)

这就是我所拥有的:

^[0-9]{2}[.][0-9]{2}$

这个表达式返回false但是从我读过的教程中我理解它应该写成这样:

^ = starting character 
[0-9] = any number 0-9
{2} = 2 numbers 0-9
[.] = full stop
$ = end

2 个答案:

答案 0 :(得分:4)

使用正确的工具完成工作。如果您正在解析小数,请使用decimal.TryParse而不是正则表达式。

string input = "00.00";
decimal d;
var parsed = Decimal.TryParse(input, out d);

如果要求始终为2位数,则为小数点,然后为2位数:

var lessThan100 = d < 100m;
var twoDecimals = d % 0.01m == 0;
var allOkay = parsed && lessThan100 && twoDecimals;

所以我们的结果是

Stage       | input = "" | "abc" | "00.00" | "123" | "0.1234"
-------------------------------------------------------------
parsed      | false      | false | true    | true  | true
lessThan100 | -          | -     | true    | false | true
twoDecimals | -          | -     | true    | -     | false

虽然如果你真的需要它是那种确切的格式,那么你可以做

var separator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
var allOkay = isOkay && input.Length == 5 && input[2] == separator;

答案 1 :(得分:0)

如果您必须使用正则表达式,则以下内容可以按要求运行:

Regex.IsMatch("12.34", @"^([0-9]{2}\.[0-9]{2})$")

正则表达式解释:

  • ^ - 字符串开头
  • () - 匹配括号内的内容
  • [0-9]{2}在0 - 9
  • 范围内正好有2个字符
  • \. - 完全停止(转义)
  • $ - 字符串结尾