我正在学习验证表达式并尝试编写一个来检查小数,如下例所示,但我遇到了一些问题。
要验证的数字是这样的:
<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
答案 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 \.
- 完全停止(转义)$
- 字符串结尾