我需要以下条件的正则表达式
我已经尝试过但不是,它没有满足所有条件
@"^([\-\+]?)\d{0,5}(.[0-9]{1,3})?)$"
E.g。最大值可以保持从-99999.999到99999.999
答案 0 :(得分:1)
使用此正则表达式:
^[-+]?\d{0,5}(\.[0-9]{1,3})?$
我这里只做了两处改动。首先,不通常需要转义字符类中的任何字符,除了打开和关闭括号,或者可能是反斜杠本身。因此,我们可以使用[-+]
来捕获初始加或减。其次,你需要在正则表达式中转义点,告诉引擎你想要匹配一个文字点。
但是,我可能会将这个正则表达式说成如下:
^[-+]?\d{1,5}(\.[0-9]{1,3})?$
这将匹配一到五位数字,后跟一个可选的小数点,后跟一到三位数字。
请注意,我们希望捕获以下内容:
0.123
但不是
.123
即。如果没有至少一个数字作为前缀,我们不想捕获一个前导小数点。
在这里演示:
答案 1 :(得分:0)
我假设您在C#中使用符号表示这样做。这里有一些可以用来测试表达式的代码,有两处更正:
\.
代替.
C#:
var expr = @"^([\-\+]?)\d{0,5}(\.[0-9]{1,3})?$";
var re = new Regex(expr);
string[] samples = {
"",
"0",
"1.1",
"1.12",
"1.123",
"12.3",
"12.34",
"12.345",
"123.4",
"12345.123",
".1",
".1234"
};
foreach(var s in samples) {
Console.WriteLine("Testing [{0}]: {1}", s, re.IsMatch(s) ? "PASS" : "FAIL");
}
结果:
Testing []: PASS
Testing [0]: PASS
Testing [1.1]: PASS
Testing [1.12]: PASS
Testing [1.123]: PASS
Testing [12.3]: PASS
Testing [12.34]: PASS
Testing [12.345]: PASS
Testing [123.4]: PASS
Testing [12345.123]: PASS
Testing [.1]: PASS
Testing [.1234]: FAIL
答案 2 :(得分:0)
最多应接受5位数
[0-9]{1,5}
然后最多3位小数
[0-9]{1,5}(\.[0-9]{1,3})?
它可能是否定的
[-]?[0-9]{1,5}(\.[0-9]{1,3})?
它可以为零
已经涵盖。
它只能是数字(最多5位数)
已经涵盖。 '最多5位数的地方'与你的第一条规则相矛盾,后者允许使用5.3。
它可以为null
未涵盖。我 强烈 建议您删除此要求。即使你的意思是“空白”,我真诚地希望你这样做,你应该事先单独检测这个案例,因为你肯定要以不同的方式处理它。
您的正则表达式包含^
和$
。我不知道为什么。您指定的规则中没有关于行开头或行尾的信息。它还允许使用前导+
,这在您的规则中也未指定。