繁体   English   中英

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

[英]How do I validate a decimal like this 00.00?

我正在学习验证表达式,并试图编写一个像下面的示例一样检查十进制的表达式,但是我遇到了一些问题。

要验证的数字如下所示:

00.00(任意2个数字,然后是。,然后是任意2个数字)

这就是我所拥有的:

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

该表达式返回false,但是从我读到的教程中可以理解,该表达式应这样写:

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

使用正确的工具完成工作。 如果要解析小数,请使用decimal.TryParse而不是Regex。

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;

如果您绝对必须使用Regex,则可以根据需要执行以下操作:

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

正则表达式说明:

  • ^ -字符串开头
  • () -匹配方括号内的内容
  • [0-9]{2}恰好是2个字符,范围为[0-9]{2}
  • \\. -句号(转义)
  • $ -字符串结尾

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM