我正在处理一个窗口表单,它接受某些范围的值作为输入。到目前为止,我只能找到0
和20000
之间的范围。
(20000|[0-9]|0[1-9]|[1-9]\d{0,3})$
有人可以帮我找到0.0
和20479.0
之间的范围(包括小数)吗?
答案 0 :(得分:1)
正如评论所示,正则表达式在这些情况下远非理想。虽然可以这样做,但会变得非常复杂。
^(?:(?:1?\d{1,4}|20[0-3]\d\d|204[0-6]\d|2047[0-8])(?:\.\d+)?|20479(?:\.0+)?)$
这是使用两个外部替换 - 一个匹配最大数量,可选地任意数量的零作为小数。另一个(第一个)有几个子变量匹配不同数字的最大值,并允许一个可选的小数点和小数。
1?\d{1,4} Matches 0-19999
20[0-3]\d\d Matches 20000-20399
204[0-6]\d Matches 20400-20469
2047[0-8] Matches 20470-20478
答案 1 :(得分:0)
如果您只想要整数(最后的.0),可以试试this
面具
^((1?[0-9]{0,4})|((20(([0-3][0-9]{0,2})|(4[0-7][0-9])))))$
如果最后需要.0,请在\.0
之前添加$
。如果你需要双精度/小数而不是精度/范围。
答案 2 :(得分:0)
这是一个建议,允许0到20479之间的数字与小数:
^(0?[0-9]{0,4}(?:\.\d+)?|1\d{4}(?:\.\d+)?|20[0-4][0-7][0-8](?:\.\d+)?|20479(?:\.[0-7])?)$
正如您所看到的,它有点复杂,您可能不希望使用正则表达式。
<强>解释强>
(0?[0-9]{0,4}(?:\.\d+)?
介于0.0和9999.99之间(小数是可选的) 1\d{4}(?:\.\d+)?
介于10000.0和19999.99之间(小数是可选的)
20[0-4][0-7][0-8](?:\.\d+)?
介于20000.0和2048.99之间(小数是可选的)
20479(?:\.[0-7])?
介于20479和20479.7之间更新:如果没有小数,您可以使用:
^(0?[0-9]{0,4}|1\d{4}|20[0-4][0-7][0-8]|20479$
答案 3 :(得分:0)
为什么要使用一个在使用实际代码时难以维护的正则表达式:
public bool IsValid(string input = "")
{
double inputParsed;
if (!double.TryParse(input, out inputParsed))
return false;
if(inputParsed < 0 || inputParsed > 20479)
return false;
return true;
}
答案 4 :(得分:0)
使用正则表达式在该点之前和之后获得两个数字 然后检查数字以达到范围。
var list = new List<string> { "VB0.0", "VB20479.0", "VB20479.7", "VB20480.0", "VB010000.0", "VB0.8", "VBx.y" };
string pattern = @"(\d+)\.(\d+)";
foreach (var input in list)
{
var m = Regex.Match(input, pattern);
if (m.Success)
{
string value1 = m.Groups[1].Value;
string value2 = m.Groups[2].Value;
bool result = value1.Length <= 5 && int.Parse(value1) <= 20479
&& value2.Length <= 1 && int.Parse(value2) <= 7;
Console.WriteLine(result);
}
else Console.WriteLine(false);
}